用于将网络文件(通过 Google 电子表格中的链接)上传到 Google Drive 的脚本
Script for uploading web files (via links in Google Spreadsheet) to Google Drive
我正在尝试为 Google 电子表格编写脚本,它将 A 列(仅 URL)中链接的所有文件上传到特定文件夹(名称写在 B 列中)。
table example
我部分成功了。 我可以上传第一个链接文件。但是我不知道如何编辑这个脚本来上传所有文件。我哪里错了?
我找到了这个脚本 here 并进行了编辑。
function downloadFile() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Pokus");
var fileURLs = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
var foldernames = sheet.getRange(1, 2, sheet.getLastRow()).getValues();
for (i = 0; i < fileURLs.length; i++) {
var response = UrlFetchApp.fetch(fileURLs[i], {muteHttpExceptions: true});
var rc = response.getResponseCode();
if (rc == 200) {
var fileBlob = response.getBlob();
var folder = DriveApp.getFoldersByName(foldernames[i]).next();
if (folder != null) {
var file = folder.createFile(fileBlob);
fileName = file.getName();
fileSize = file.getSize();
}
}
var fileInfo = { "rc":rc, "fileName":fileName, "fileSize":fileSize };
return fileInfo;
}
}
我是编写脚本的初学者,没有经验。有人可以帮忙吗?
这个修改怎么样?
修改点:
- for循环中有
return fileInfo;
。所以在第一个循环中,它是从函数返回的。这样,只能上传第一个链接文件。
- 所有信息都可以通过修改
fileInfo
为数组来检索。
修改脚本:
function downloadFile() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Pokus");
var fileURLs = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
var foldernames = sheet.getRange(1, 2, sheet.getLastRow()).getValues();
var fileInfo = []; // Added
for (i = 0; i < fileURLs.length; i++) {
var response = UrlFetchApp.fetch(fileURLs[i], {muteHttpExceptions: true});
var rc = response.getResponseCode();
if (rc == 200) {
var fileBlob = response.getBlob();
var folder = DriveApp.getFoldersByName(foldernames[i]).next();
if (folder != null) {
var file = folder.createFile(fileBlob);
fileName = file.getName();
fileSize = file.getSize();
}
}
fileInfo.push({ "rc":rc, "fileName":fileName, "fileSize":fileSize }); // Modified
}
return fileInfo; // Modified
}
注:
当上传文件较多时,可能会出现错误。
如果我误解了你的问题,我很抱歉。
我正在尝试为 Google 电子表格编写脚本,它将 A 列(仅 URL)中链接的所有文件上传到特定文件夹(名称写在 B 列中)。
table example
我部分成功了。 我可以上传第一个链接文件。但是我不知道如何编辑这个脚本来上传所有文件。我哪里错了?
我找到了这个脚本 here 并进行了编辑。
function downloadFile() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Pokus");
var fileURLs = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
var foldernames = sheet.getRange(1, 2, sheet.getLastRow()).getValues();
for (i = 0; i < fileURLs.length; i++) {
var response = UrlFetchApp.fetch(fileURLs[i], {muteHttpExceptions: true});
var rc = response.getResponseCode();
if (rc == 200) {
var fileBlob = response.getBlob();
var folder = DriveApp.getFoldersByName(foldernames[i]).next();
if (folder != null) {
var file = folder.createFile(fileBlob);
fileName = file.getName();
fileSize = file.getSize();
}
}
var fileInfo = { "rc":rc, "fileName":fileName, "fileSize":fileSize };
return fileInfo;
}
}
我是编写脚本的初学者,没有经验。有人可以帮忙吗?
这个修改怎么样?
修改点:
- for循环中有
return fileInfo;
。所以在第一个循环中,它是从函数返回的。这样,只能上传第一个链接文件。 - 所有信息都可以通过修改
fileInfo
为数组来检索。
修改脚本:
function downloadFile() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Pokus");
var fileURLs = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
var foldernames = sheet.getRange(1, 2, sheet.getLastRow()).getValues();
var fileInfo = []; // Added
for (i = 0; i < fileURLs.length; i++) {
var response = UrlFetchApp.fetch(fileURLs[i], {muteHttpExceptions: true});
var rc = response.getResponseCode();
if (rc == 200) {
var fileBlob = response.getBlob();
var folder = DriveApp.getFoldersByName(foldernames[i]).next();
if (folder != null) {
var file = folder.createFile(fileBlob);
fileName = file.getName();
fileSize = file.getSize();
}
}
fileInfo.push({ "rc":rc, "fileName":fileName, "fileSize":fileSize }); // Modified
}
return fileInfo; // Modified
}
注:
当上传文件较多时,可能会出现错误。
如果我误解了你的问题,我很抱歉。