慕容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++)
添加回答
舉報
0/150
提交
取消