Google apps script 将Google电子表格中的数据保存到数组中 for(var i=0;i

Google apps script 将Google电子表格中的数据保存到数组中 for(var i=0;i,google-apps-script,Google Apps Script,因为您写过这是执行两次,第二次是使用空数据,这听起来像是一个问题,onFormSubmit()trigger运行了两次。这似乎是一个应用程序脚本错误,但堆栈溢出了用户,并提供了一个有用的方法:检查所需问题的值。因此,只需在开始时包含if(e.values&&!e.values[1]){return;},就可以防止额外执行 for(var i=0; i<sheet.getMaxColumns(); i++){ var params[i] = e.values[i]; } con

因为您写过这是执行两次,第二次是使用空数据,这听起来像是一个问题,
onFormSubmit()
trigger运行了两次。这似乎是一个应用程序脚本错误,但堆栈溢出了用户,并提供了一个有用的方法:检查所需问题的值。因此,只需在开始时包含
if(e.values&&!e.values[1]){return;}
,就可以防止额外执行

for(var i=0; i<sheet.getMaxColumns(); i++){
   var params[i] = e.values[i]; 
  }

console.log(params);

for(var z=0; z<paramsInfo.length; z++){
    var paramsInfoCheck = paramsInfo[z];


    var template = HtmlService.createTemplateFromFile(paramsInfoCheck.name);
    template[paramsInfoCheck.name] = params[paramsInfoCheck.number];
    template.recorded = params[51];
    template.remarks = params[52];

    if((params[paramsInfoCheck.number] < paramsInfoCheck.min) || (params[paramsInfoCheck.number] > paramsInfoCheck.max)){

      MailApp.sendEmail(recipients,
    "Parameter Out of Range Notification",
     "",{htmlBody: template.evaluate().getContent() + spreadsheetlink});
     }
    }
函数onFormSubmit(e){
//通过检查所需问题的值来拒绝虚假触发器。
//在这种情况下,我们假设e.value[1]是必需的。
if(e.values&&!e.values[1]){return;}
var sheet=e.range.getSheet();//假设您是这样定义工作表的
//这是您的原始代码
对于(var i=0;iparamsInfoCheck.max)){
MailApp.sendmail(收件人,“参数超出范围通知”、“”、{htmlBody:template.evaluate().getContent()+spreadsheetlink});
}
}
}

因为您写过这是执行两次,第二次是使用空数据,所以这听起来像是一个问题,
onFormSubmit()
触发器运行了两次。这似乎是一个应用程序脚本错误,但堆栈溢出了用户,并提供了一个有用的方法:检查所需问题的值。因此,如果(e.values&&!e.values[1]){return;},它应该可以防止额外执行

for(var i=0; i<sheet.getMaxColumns(); i++){
   var params[i] = e.values[i]; 
  }

console.log(params);

for(var z=0; z<paramsInfo.length; z++){
    var paramsInfoCheck = paramsInfo[z];


    var template = HtmlService.createTemplateFromFile(paramsInfoCheck.name);
    template[paramsInfoCheck.name] = params[paramsInfoCheck.number];
    template.recorded = params[51];
    template.remarks = params[52];

    if((params[paramsInfoCheck.number] < paramsInfoCheck.min) || (params[paramsInfoCheck.number] > paramsInfoCheck.max)){

      MailApp.sendEmail(recipients,
    "Parameter Out of Range Notification",
     "",{htmlBody: template.evaluate().getContent() + spreadsheetlink});
     }
    }
函数onFormSubmit(e){
//通过检查所需问题的值来拒绝虚假触发器。
//在这种情况下,我们假设e.value[1]是必需的。
if(e.values&&!e.values[1]){return;}
var sheet=e.range.getSheet();//假设您是这样定义工作表的
//这是您的原始代码
对于(var i=0;iparamsInfoCheck.max)){
MailApp.sendmail(收件人,“参数超出范围通知”、“”、{htmlBody:template.evaluate().getContent()+spreadsheetlink});
}
}
}

您的问题很难理解,并且您的代码片段中没有
console.log()
,因此似乎缺少了最重要的部分。请查看并澄清。很抱歉,我错过了
console.log()
out。我已经编辑了代码。基本上,我只有一个
console.log
,但是在我的执行日志上,第一次执行捕获了中的所有值,但在第二次执行时,它显示为空白。如前所述,“测试”之后忽略空值,因为它们是我手动添加的附加列,供我自己参考。@diegoyer question很难理解,并且您的代码段中没有
console.log()
,因此似乎缺少了最重要的部分。请查看并澄清。很抱歉,我错过了
console.log()
out。我已经编辑了代码。基本上,我只有一个
console.log
,但是在我的执行日志上,第一次执行捕获了中的所有值,但在第二次执行时,它显示为空白。如前所述,“测试”之后忽略空值,因为它们是我手动添加的附加列,供我自己参考。@diegode要求的问题必须是形式上的合法要求的问题?或者我们可以根据要求假设任何问题吗@Diego@D3FTY这应该是一个合法的必修问题,但这并不意味着第一个问题应该是必修的(如我的回答)。如果表单中的问题不是必需的,而有人未回答该问题就提交了,那么您的触发器将跳过该响应。明白了。我将尝试此操作,并在此处正确更新所需问题。谢谢!所需问题必须是表单中合法的必需问题吗?或者我们可以假设任何问题吗按要求做什么@Diego@D3FTY这应该是一个合法的必修问题,但这并不意味着第一个问题应该是必修的(如我的回答)。如果表单中的问题不是必需的,而有人未回答该问题就提交了,则您的触发器将跳过该响应。我将尝试此问题,并在此处正确更新所需问题。谢谢!