Google 시트 : ID 가져 오기에 대한 작업 코드이지만 결과는 파일 이름 행에 정렬되어야합니다.

Nov 20 2020

ID는 왼쪽의 샘플처럼 정렬되어야합니다. 그러나 오른쪽에서 볼 수 있듯이 11 열까지 모든 것이 잘 작동합니다. 누군가 이걸 도와 줄 수 있나요?

제가 사용하는 코드는 다음과 같습니다. 여기 에서 얻었습니다 .

function myFunction() {
  const ss = SpreadsheetApp.getActive();
  
  var SSID =  ss.getId();
  var spreadsheetFile =  DriveApp.getFileById(SSID); //get file by id
  //var folderId = spreadsheetFile.getParents().next().getId();
  var folderId = "1vn5n00iCpKUWe_JsTFAesQsSmBsXu36i";
  
  const sh = ss.getSheetByName('Sheet4'); // change that to the name of your sheet
  const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');
  const Folder = DriveApp.getFolderById(folderId);

  // 1. Retrieve the file list of all files in `folderId`.
  const getFileList = (f, folders = [], fileList = {}) => {
  const fs = f.getFiles();
  while (fs.hasNext()) {
    const file = fs.next()
    fileList[file.getName()] = file.getId();
  }
  const fols = f.getFolders();
  const folderObjs = [];
  while (fols.hasNext()) folderObjs.push(fols.next());
  if (folderObjs.length > 0) {
    folders.push(folderObjs);
    folderObjs.forEach(fol => getFileList(fol, folders, fileList));
  }
  return fileList;
};
const fileList = getFileList(Folder);

// 2. Create an array for putting values to Spreadsheet.
const IDs = filenames.map(fn => [fileList[fn] || ""]);
 
  sh.getRange(3,3,IDs.length,1).setValues(IDs);
}

답변

2 Tanaike Nov 21 2020 at 05:36

현재 문제의 원인은 const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');. 그래서 이것을 다음과 같이 수정하는 것은 어떻습니까?

에서:

const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');

에:

const filenames = sh.getRange('B3:B' + sh.getLastRow()).getValues();