Holen Sie sich die IDs der Dateien in verschiedenen Ordnern
Dies ist eine Folgefrage für diesen Thread .
Gibt es eine Möglichkeit für mich, die IDs der Datei in einem anderen Ordner abzurufen? Unten ist das Verzeichnis, an dem ich arbeite.

Und das ist der Code, den ich benutze.
function myFunction() {
const ss = SpreadsheetApp.getActive();
var SSID = ss.getId(); //sheet id
var spreadsheetFile = DriveApp.getFileById(SSID);
var folderId = spreadsheetFile.getParents().next().getId();
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 IDs = [];
const Folder = DriveApp.getFolderById(folderId);
filenames.forEach(fn=>{
let Files = Folder.getFilesByName(fn);
while(Files.hasNext()){
let file = Files.next();
IDs.push([file.getId()]);
}
});
sh.getRange(3,3,IDs.length,1).setValues(IDs);
}
Dieser Code funktioniert einwandfrei, wenn sich die Dateien in einem Ordner befinden, funktioniert jedoch nicht für Unterordner oder einen anderen Ordner.
Unten ist das Blatt, an dem ich arbeite.

Antworten
Wie wäre es in diesem Fall mit dem folgenden Ablauf, um Ihr Ziel zu erreichen?
- Rufen Sie die Dateiliste aller Dateien in ab
folderId
. - Erstellen Sie ein Array, um Werte in die Tabelle einzufügen.
Wenn Ihr Skript geändert wird, sieht es wie folgt aus.
Geändertes Skript:
Von:const IDs = [];
const Folder = DriveApp.getFolderById(folderId);
filenames.forEach(fn=>{
let Files = Folder.getFilesByName(fn);
while(Files.hasNext()){
let file = Files.next();
IDs.push([file.getId()]);
}
});
Zu:
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] || ""]);
Hinweis:
- In diesem Fall wird davon ausgegangen, dass in der Spalte "B" der Tabelle nicht dieselben Dateinamen vorhanden sind. Bitte seien Sie vorsichtig.
Hier gibt es einige Möglichkeiten. Zunächst gibt es die DriveApp.getFoldersByName(name)Methode, mit der die Liste aller Ordner in Ihrem Laufwerk zurückgegeben wird, die mit dem angegebenen Namen übereinstimmen. Sie müssen natürlich vor der Laufzeit den Namen des Ordners kennen, und Sie können keine anderen Ordner mit demselben Namen haben, da Sie sonst das Risiko eingehen Nehmen Sie die ID des falschen Ordners.
Wenn Sie die ID eines Ordners weiter oben in der Ordnerstruktur kennen (z. B. die direkt übergeordneten Skripte, wie im obigen Beispiel gezeigt File.getParents()), können Sie die Auswirkungen der oben genannten Methode mithilfe von einschränken Folder.getFoldersByName(name). Hier gelten die gleichen Einschränkungen wie oben, sie sind jedoch schneller (weniger zu iterierende Dateien), erfordern jedoch die ID eines übergeordneten Ordners.
Sie können die Ordner-ID auch einfach aus der URL kopieren, wenn Sie wissen, auf welche Datei Sie zugreifen müssen, und über Skriptausführungen hinweg konstant bleiben, und sie als konstante Variable speichern. Diese Methode ist natürlich starrer, da Sie die Datei vor der Laufzeit erstellen müssen. Sie müssen jedoch nicht über den Verzeichnisbaum iterieren und sind daher schneller.