为了账号安全,请及时绑定邮箱和手机立即绑定

For 循环 getFileById() 抛出错误:“找不到具有给定 ID 的项目......”

For 循环 getFileById() 抛出错误:“找不到具有给定 ID 的项目......”

慕容708150 2021-11-18 09:32:31
首先,我对编程非常陌生,我只是在不断地想办法解决问题。我正在尝试编写一个应用程序脚本,该脚本将按 ID(ID 存储在 Google 表格文件中)将特定文件复制到提交表单时创建的这个新文件夹中。但是我的 for 循环抛出错误并说:“找不到具有给定 ID 的项目,或者您无权访问它。(第 30 行,文件“应用脚本””即使当我单独运行每个文件(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 窗口截图
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


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


这意味着如果num_dsd_images是 3,i则使用以下值:1、2、3、4。这是正确的吗?根据您的变量名称,我希望只有 3 个图像而不是 4 个。


如果您使用<and not <=,则 for 的值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-index 并<=像这样使用: for (var i = 1; i <= num_dsd_images; i++)


查看完整回答
反对 回复 2021-11-18
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信