Feuilles Google: code de travail pour obtenir les ID, mais le résultat doit être aligné sur la ligne du nom de fichier

Nov 20 2020

Les identifiants doivent être alignés comme l'échantillon sur le côté gauche. Mais comme vous pouvez le voir sur le côté droit, tout fonctionne bien jusqu'à la rangée 11. Quelqu'un peut-il m'aider avec celui-ci?

Voici le code que j'utilise. Je l'ai eu d' ici .

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

Réponses

2 Tanaike Nov 21 2020 at 05:36

Je pense que la raison de votre problème actuel peut être due à par const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');. Alors que diriez-vous de modifier cela comme suit?

De:

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

À:

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