javascript - For loop getFileById() 抛出错误:“找不到具有给定 ID 的项目.....”
问题描述
首先,我对编程非常陌生,我只是边走边想。我正在尝试编写一个应用程序脚本,该脚本将按 ID 将特定文件(ID 存储在 google sheet 文件中)复制到提交表单时创建的这个新文件夹中。但是我的 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);
项目触发器如下: 项目触发器窗口截图
解决方案
对我来说,这似乎是一个错误。您确定您的 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 索引并<=
像这样使用:
for (var i = 1; i <= num_dsd_images; i++)
推荐阅读
- javascript - 编译后是否可以监听组件的 React 渲染(例如在浏览器控制台中)?
- aws-api-gateway - AWS CDK:如何在一个 API 中合并 Legacy swagger 和 CDK 定义的资源?
- python - 用python计算文件中的字母和单词
- python - Python 基础 - ps.tekken() = '对象没有属性'
- bash - 批量更新 YAML 文件特定组件
- c++ - 将 R studio 链接到 C++ boost 库(windows)
- react-native - 如何使用弹性盒在口粮中划分屏幕
- vue.js - Rollup,Vue 和 Buble,scss 文件中的意外标记
- .net - 如何使用 Newtonsoft.JSON 递归生成 JSON 模式?
- python - 完全向量化切片矩阵乘法