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();