【发布时间】:2021-06-30 16:28:20
【问题描述】:
我有一个在表单提交触发器上运行的 Google 脚本。
提交表单时,会将新行添加到链接的电子表格中,并且脚本会运行一些操作来创建新文件夹和 Google 文档。
我想通过 Zapier 而不是表单 sumbission 添加新行来修改这一点。
使用 Zapier 添加新行很容易,
但是,在将脚本触发器设置为 'On form submit' 中的 'On change' 事件时,我得到了错误;
TypeError: Cannot read property '0' of undefined
我认为在使用 e.values 时,脚本期望从表单提交中获得这些,但由于 Zapier 添加的行中不存在它们而失败。
问题: 我不知道如何解决错误并允许脚本在提交表单时以与从 Zapier 添加新行时相同的方式运行? https://i.stack.imgur.com/vJuRw.png
我有什么;
function autoFillGoogleDocFromForm(e) {
var Timestamp = e.values[0];
var NAME = e.values[1];
var file = DriveApp.getFileById('1234');
var folder = createNewFolder();
var copy = file.makeCopy(NAME, folder);
var newId = copy.getId();
try{
var doc = DocumentApp.openById(newId).addEditor(email);
}
catch(error){
var doc = DocumentApp.openById(newId);
}
var body = doc.getBody();
body.replaceText('{{Name}}', Name);
doc.saveAndClose();
}
<!--This creates a Google drive folder -->
function createNewFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Sheet1");
var POSNAME = names.getRange(names.getLastRow(),
2).getValue();
var folders = DriveApp.getFoldersByName(NAME);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==NAME){
return folder;
}
}
var parentFolder=DriveApp.getFolderById("1234");
return parentFolder.createFolder(NAME);
}
【问题讨论】:
-
onFormSubmit 触发器的事件对象与 onChange 触发器ref 的事件对象完全不同。或者你可以 Logger.log(JSON.stringify(e));并实际查看事件对象。顺便说一句,它只检测用户而不是脚本添加的新行。
标签: google-apps-script google-sheets google-forms zapier