用于将网络文件(通过Google电子表格中的链接)上传到Google云端硬盘的脚本

时间:2017-10-13 10:41:42

标签: google-apps-script google-sheets google-drive-api urlfetch

我正在尝试为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;
    }

    }

我是编写脚本的初学者,而且我没有经验。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

这次修改怎么样?

修改要点:

  • 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
}

注意:

当上传文件很多时,可能会发生错误。

如果我误解了你的问题,我很抱歉。