Google Sheets: Arbeitscode zum Abrufen von IDs, aber das Ergebnis sollte in der Dateinamenzeile ausgerichtet sein

Nov 20 2020

Die IDs sollten wie die Probe auf der linken Seite ausgerichtet sein. Aber wie Sie auf der rechten Seite sehen können, funktioniert bis Zeile 11 alles einwandfrei. Kann mir jemand dabei helfen?

Hier ist der Code, den ich verwende. Ich habe es von hier bekommen .

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

Antworten

2 Tanaike Nov 21 2020 at 05:36

Ich denke, dass der Grund für Ihr aktuelles Problem von sein könnte const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');. Wie wäre es also damit, dies wie folgt zu ändern?

Von:

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

Zu:

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