我有新房產串列的谷歌表格。
提交表單后,我希望在父檔案夾中創建一個檔案夾,標題為輸入的名稱(表單輸入欄位 1),并包含該表單上傳的影像(表單輸入欄位 3)。如此有效地,在每個表單條目上創建一個檔案夾。
在 Google 表單中,使用腳本編輯器,我在下面輸入了帶有父檔案夾 ID 的代碼。我還為 onFormSubmit 設定了一個觸發器。
但是,第 5 行拋出了一個錯誤TypeError: Cannot read property 'getItemResponses' of undefined
請理解,我是這類代碼的初學者,所以我不確定并且有點超出我的深度。
這個任務可以嗎?
謝謝
function onFormSubmit(e) {
const folderId = "1VXzzzzzzzzzzzzzz";
const form = FormApp.getActiveForm();
const formResponses = form.getResponses();
const itemResponses = formResponses[formResponses.length-1].getItemResponses();
Utilities.sleep(3000); // This line might not be required.
// Prepare the folder.
const destFolder = DriveApp.getFolderById(folderId);
const folderName = itemResponses[0].getResponse();
const subFolder = destFolder.getFoldersByName(folderName);
const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);
// Move files to the folder.
itemResponses[1].getResponse().forEach(id => DriveApp.getFileById(id).moveTo(folder));
}
uj5u.com熱心網友回復:
我認為主要問題是您獲得答案的方式:formResponses[formResponses.length-1].getItemResponses();.
由于每個答案都在陣列中占據一個位置,因此很容易跟蹤它們。如果問題 1 占據位置 0,問題 2 占據位置 1,依此類推。
以下示例經過測驗并且有效:
function handleForms() {
/* Initialize an empty array for save the folders */
let folders = []
const form = FormApp.getActiveForm()
for (const res of form.getResponses()) {
/* Getting the responses in this example only are two of them */
const folderName = res.getItemResponses()[0].getResponse()
const imgResponse = res.getItemResponses()[1]
/* Create a new folder with the name */
const folder = DriveApp.createFolder(folderName)
/* Iterate to move the files to the new folder */
for (const img of imgResponse.getResponse()) {
DriveApp.getFileById(img).moveTo(folder)
}
Logger.log(folders)
folders.push(folder)
}
/* Iterate over the folders to move them to the main one */
const mainFolder = DriveApp.getFolderById('<YOUR_FORM_FOLDER>')
folders.forEach(f => DriveApp.getFolderById(f.getId()).moveTo(mainFolder))
}
更新
如果要保留原始檔案,只需在影像迭代中添加這兩行:
const newIMG = DriveApp.getFileById(img).makeCopy()
newIMG.moveTo(folder)
更新 2
為了控制檔案是否已經存在,您可以實作一個控制元件以在創建檔案夾之前檢查該檔案夾是否存在。
const checker = DriveApp
.getFolderById(MAIN_FOLDER)
.getFoldersByName(folderName)
if (checker.hasNext()) continue
/* Create a new folder with the name */
const folder = DriveApp.createFolder(folderName)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442357.html
