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
我正在使用 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 |