javascript - 对于循环 getFileById() 抛出错误 : "No item with the given ID could be found....."

标签 javascript for-loop google-apps-script google-sheets

首先,我对编程还很陌生,我只是边走边想。我正在尝试编写一个应用程序脚本,该脚本将按 ID(ID 存储在谷歌工作表文件中)将特定文件复制到提交表单时创建的这个新文件夹中。但是我的 for 循环抛出错误提示:“找不到具有给定 ID 的项目,或者您无权访问它。(第 30 行,文件“App Script””

即使当我对每个文件 (byID) 单独运行代码时,它仍然有效。有人可以告诉我我做错了什么。 (以下代码中的ID不是实际ID)

function SheetAutomation(){
    function getSheetById(id) {
      return SpreadsheetApp.getActive().getSheets().filter(
      function(s) {return s.getSheetId() === id;}
      )[0];
    }

  var sheet_form_res = getSheetById(1692343941);
  var lr = sheet_form_res.getLastRow();
  var casenumber = sheet_form_res.getRange(lr,1).getValue();
  Logger.log(casenumber);

  var folder = DriveApp.getFolderById("1tr2A3e3edwelB8dgkN8tgdPYv8T8V6");
  var newFolder = folder.createFolder(casenumber);
  var newFolderID = newFolder.getId();
  Logger.log('newFolderID: ' + newFolderID);
  var casefolderid = sheet_form_res.getRange(lr, 7).setValue(newFolderID);
  Logger.log('Casefolder id: ' + casefolderid.getValues());

  var sheet_dsd_image_id = getSheetById(1233563458640);
  var num_dsd_images = sheet_dsd_image_id.getRange(lr,1).getValue();
  Logger.log('num_dsd_images: ' + num_dsd_images);

  for (var i=0; i<=num_dsd_images; i++){
    var image_id = sheet_dsd_image_id.getRange(lr,i+1).getValue();
    Logger.log(image_id);
    // The line of code that doesn't work
    var image_file = DriveApp.getFileById(image_id);
    Logger.log(image_file);
  }
};

我用下面的代码替换了 for 循环,看看我是否真的无法访问这些文件,但这似乎有效,我只是无法让它通过循环工作

  var image_id_1 = sheet_dsd_image_id.getRange(lr,2).getValue();
  var image_file_1 = DriveApp.getFileById(image_id_1);
  Logger.log(image_file_1);
  image_file_1.makeCopy(newFolder);

  var image_id_2 = sheet_dsd_image_id.getRange(lr,3).getValue();
  var image_file_2 = DriveApp.getFileById(image_id_2);
  Logger.log(image_file_2);
  image_file_2.makeCopy(newFolder);

  var image_id_3 = sheet_dsd_image_id.getRange(lr,4).getValue();
  var image_file_3 = DriveApp.getFileById(image_id_3);
  Logger.log(image_file_3);
  image_file_3.makeCopy(newFolder);

项目触发器如下: Project Trigger window screenshot

最佳答案

对我来说,这似乎是一个错误。你确定你的 for 循环在你期望的范围内吗?您使用 <= 定义范围:

for (var i=0; i<=num_dsd_images; i++)

这意味着如果num_dsd_images为3,i的以下值使用的是:1、2、3、4。对吗?根据您的变量名称,我预计只有 3 张图片而不是 4 张。

如果您使用 <而不是 <= , i 的值将是:1、2、3。通过此更改,您的循环将像:

for (var i=0; i < num_dsd_images; i++){
    var image_id = sheet_dsd_image_id.getRange(lr,i+1).getValue();
    Logger.log(image_id);
    // The line of code that doesn't work
    var image_file = DriveApp.getFileById(image_id);
    Logger.log(image_file);
 }

或者,您可以对范围进行 1 索引并使用 <=像这样: for (var i = 1; i <= num_dsd_images; i++)

关于javascript - 对于循环 getFileById() 抛出错误 : "No item with the given ID could be found.....",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58346062/

相关文章:

javascript - 正则表达式匹配空格后不跟特定单词

javascript - 自动将内容滚动到底部在 Chrome 中有效,但在 Safari 中无效

Python for 循环时间差异

c# - 将 Try-Catch 放在 For 循环中是不好的做法吗?

javascript - for循环中的异步方法

javascript - Google Apps 脚本查找两个数组中具有相同列值的行

javascript - 逗号分隔的有效手机号码的正则表达式

javascript - 缓动函数对象运行得太快

javascript - 如何在 Google Apps 脚本中修改 HTMLOutput 之前的 html 文件

google-apps-script - 我可以随机化 MultipleChoiceItem 中的项目吗?