将谷歌文档中的字词替换为谷歌表格中的字词 - 无法读取未定义的属性"0"



我按照说明并三重检查了此代码,找不到任何差异,但我仍然收到此错误。无法读取未定义的属性"0">

请帮助我

var title = e.values[0];
var surname = e.values[1]; 
var fullNames = e.values[2];
var ID = e.values[3];
var taxNumber = e.values[4];
var file = DriveApp.getFileById("1tX6l8ZAHs9Lv9Np1fdOZXPbsFqMcx8ggPv5So8WZ-cM");
var folder = DriveApp.getFolderById("17F678vzKcE7AaVqef0k-f96uHCOJeotv");
var copy = file.makeCopy(surname + ',' + fullNames, folder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
body.replaceText("{{FullNames}}", fullNames);
body.replaceText("{{Surname}}", surname);
body.replaceText("{{ID}}", ID);
body.replaceText("{{IncomeTaxNumber}}", taxNumber);
doc.saveAndClose();
}```
function myFormSubmit(e) {
var title=e.values[0];//This is a timestamp
var surname=e.values[1]; 
var fullNames=e.values[2];
var ID=e.values[3];
var taxNumber=e.values[4];
var file=DriveApp.getFileById("1tX6l8ZAHs9Lv9Np1fdOZXPbsFqMcx8ggPv5So8WZ-cM");
var folder=DriveApp.getFolderById("17F678vzKcE7AaVqef0k-f96uHCOJeotv");
if(surname && fullNames && ID && taxNumber && folder && file) {
var copy=file.makeCopy(surname + ',' + fullNames, folder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
body.replaceText("{{FullNames}}", fullNames);
body.replaceText("{{Surname}}", surname);
body.replaceText("{{ID}}", ID);
body.replaceText("{{IncomeTaxNumber}}", taxNumber);
doc.saveAndClose();
}
}
function createFormSubmitTrigger() {
if(!isTrigger('myFormSubmit')) {
ScriptApp.newTrigger('myFormSubmit').forForm('formId').onFormSubmit().create();
}
}
function isTrigger(funcName){
var r=false;
if(funcName){
var allTriggers=ScriptApp.getProjectTriggers();
for (let i=0;i<allTriggers.length;i++){
if(funcName==allTriggers[i].getHandlerFunction()){
r=true;
break;
}
}
}
return r;
}

if

var timestamp = e.values[0];

抛出错误

TypeError: Cannot read property 'values' of undefined

这意味着您正在尝试通过按"播放"按钮手动运行脚本

这是在触发器上运行并使用事件对象的函数中无法做到的。

  • 在您的情况下e.values是一个事件对象 - 在表单提交时传递给电子表格的值,它们只能在触发触发器时检索。
  • 如果您手动运行函数 - 此时不会有事件值传递到您的电子表格,因此values将被undefined并且您的脚本Cannot read property 'values' of undefined

解决方法

如果要测试代码的其余部分是否按预期工作 - 请使用硬编码的虚拟值对其进行测试。

  • 您可以使用三元条件运算符来检查定义的变量(e.values(是否存在,如果不存在 - 分配默认值。

    样本:

    timestamp = e ? e.values[0] : "5/28/2020 11:32:48";

  • 此行表示如果事件对象e存在(当触发器触发函数时(,则将timestampe.values[0]

  • 如果e不存在(因为您正在手动测试函数(,则将硬编码值5/28/2020 11:32:48分配给timestamp

  • 请在所有e.values中实现这一点,以避免错误Cannot read property 'values' of undefined

好的,我通过删除电子表格中的所有其他选项卡来正确处理它。不过感谢您的帮助!

最新更新