将数据从Google Spreadsheet保存到数组

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});
     }
    }

将数据从Google Spreadsheet保存到数组

如图所示,当我只有1个console.log时,它运行了2个console.log,第一个日志捕获了这些值,而第二个则没有。

  • 在“测试”之后忽略空值-由于这些值并不意味着要捕获,因此其空值是因为表格上没有任何内容。

目前,我有一个用来收集一些数据的表格。它有超过50+列。 如果键入的某些值不在范围内,我还有另外一个for loop和一个if loop用于发送电子邮件。我使用了onFormSubmit事件触发器。

当我console.log值数组时。有些值是null,但是电子表格中的特定列号处有值。 我假设由于数据量大,该程序没有足够的时间来处理它以便放入数组并运行MailApp函数。有人发生过这种事吗?

我的执行日志显示已完成,没有错误,但是缺少某些值,或者是null

lisa7262 回答:将数据从Google Spreadsheet保存到数组

由于您写道该操作执行了两次,而第二次使用空数据执行,因此听起来像onFormSubmit()触发器运行两次的问题。这似乎是一个Apps脚本错误,但是Stack Overflow用户J.G.Cooper提供了一个有用的workaround:检查所需问题的值。因此,只需在开始时添加if (e.values && !e.values[1]) { return; },它就可以防止执行额外的操作。

function onFormSubmit(e) {

  // Reject spurious triggers by checking the value of a required question.
  // In this case,we assume  e.value[1] is required.
  if (e.values && !e.values[1]) { return; }

  var sheet = e.range.getSheet(); // Assuming this is how you defined sheet

  // This is your original code
  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});
    }
  }
}
本文链接:https://www.f2er.com/3126842.html

大家都在问