Google 驱动器链接和文件名

Google Drive Links & File Names

我正在使用 google 工作表脚本编辑器从文件夹中获取文件名和 URL。我已修改此代码 (https://webapps.stackexchange.com/questions/88769/get-share-link-of-multiple-files-in-google-drive-to-put-in-spreadsheet?answertab=active#tab-top) 以打印 url,但我不确定如何引入文件名。

例如,这些文件是

A.csv

B.csv

C.csv

我想打印

ID 网址

一个https://drive.google.com/file/d/....

B https://drive.google.com/file/d/....

B https://drive.google.com/file/d/....

这是我的代码

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var c1 = s.getRange("B2");
  var c2 = s.getRange("A2")
  var fldr = DriveApp.getFolderById("14ZKphLE02f6tdyU7LGEjbEEfrfD89nJM");
  var files = fldr.getFiles();
  var urls = [], f, str;
  while (files.hasNext()) {
    f = files.next();
    str = '=hyperlink("' + f.getUrl() + '")';
    urls.push([str]);
  }
  s.getRange(c1.getRow(), c1.getColumn(), urls.length).setFormulas(urls);
  var ids = [], f, str;
  while (files.hasNext()) {
    f = files.next();
    str = 'f.getName()';
    ids.push([str])
  }
  s.getRange(c2.getRow(), c2.getColumn(), ids.length).setValues(ids);
}

我收到错误:“范围内的行数必须至少为 1。”

你之所以遇到这样的错误是因为你的数组ids是空的。 当您使用 FileIterator.next() 获取文件集合中的下一项时,您已完成从第一个 while 循环检查文件中的所有项目。因此,第二个 while 循环将不再执行。 (您可以包含日志来调试您的代码。最初,您的 files.hasNext() 将 return false 在您的第二个 while 循环中)。

您实际上可以列出文件名并使用您的第一个 while 循环构造您的 url。

示例代码:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var c1 = s.getRange("B2");
  var c2 = s.getRange("A2")
  var fldr = DriveApp.getFolderById("14ZKphLE02f6tdyU7LGEjbEEfrfD89nJM");
  var files = fldr.getFiles();
  var urls = [], ids = [], f, str;
  while (files.hasNext()) {
    f = files.next();
    str = '=hyperlink("' + f.getUrl() + '")';
    urls.push([str]);
    //ids.push([f.getName()]); //Filename with extensions
    ids.push([f.getName().replace(/\.[^/.]+$/, "")]); //Remove filename extensions
  }

  s.getRange(c1.getRow(), c1.getColumn(), urls.length).setFormulas(urls);
  s.getRange(c2.getRow(), c2.getColumn(), ids.length).setValues(ids);

}

输出:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var fldr = DriveApp.getFolderById(gobj.globals.testfolderid);
  var files = fldr.getFiles();
  var A = [], f, str;
  while (files.hasNext()) {
    f = files.next();
    str = '=hyperlink("' + f.getUrl() + '")';
    A.push([f.getName(), str]);
  }
  s.getRange(2, 2, A.length, A[0].length).setValues(A);
}

输出:

Filename Url
htmlstring.txt Redacted
Testing doPost and doGet Redacted
TestSource Redacted
Doc1 Redacted
Doc2 Redacted
Redacted Redacted
editlog.csv Redacted