Holen Sie sich die gesamte ID der Dateien

Nov 20 2020

Ich arbeite an einem Ordner pro Klassenstufe mit demselben Inhalt. Ich habe die IMPORT RANGE-Funktion verwendet, um die Tabellen zu verbinden. Daher muss ich die IDs jedes Mal aktualisieren, wenn ich eine andere Klassenstufe erstelle. Darf ich fragen, ob es mir möglich ist, alle IDs aller Dateien, an denen ich arbeite, abzurufen, ohne sie einzeln zu bearbeiten oder einzugeben? Vielleicht ein Skript, das es einfacher machen kann?

Hier ist das Bild der Liste der IDs.

Wenn es möglich ist, besteht der Fluss, an den ich denke, darin, den Dateinamen der Dateien und dann die ID davon abzurufen.

Antworten

2 Marios Nov 20 2020 at 17:37

Erläuterung:

  • Das folgende Skript ruft alle Dateinamen im Bereich ab B3:B. Dann forEach Dateinamen verwenden wir getFilesByName , um die Dateien zu erhalten zu diesem Namen entspricht. Stellen Sie sicher, dass Sie keine Dateien mit demselben Namen haben. Andernfalls gibt dieser Prozess mehrere IDs für denselben Namen zurück und die Logik funktioniert daher nicht.

  • Schließlich verwenden wir getId , um die ID jeder Datei abzurufen und in einem Array zu speichern. Dieses Array wird dann ausgehend von der Zelle in Spalte C eingefügt, C3wie Sie im Screenshot angeben.

Lösung:

function myFunction() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1'); // change that to the name of your sheet
  const filenames = sh.getRange('B3:B').getValues().flat().filter(r=>r!='');
  const IDs = [];
  const folderId = "put your folder id here";
  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);
}