Сохранение данных из Google Spreadsheet в массив - PullRequest
0 голосов
/ 11 ноября 2019
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});
     }
    }

enter image description here

Как вы можете видеть на картинке, он запустил 2 console.log, когда у меня только 1 console.log, первый журнал фиксирует эти значенияв то время как второй - нет.

  • игнорировать NULL после 'Test' - так как эти значения не предназначены для захвата, следовательно, он нулевой, так как в форме ничего нет.

В настоящее время у меня есть форма, которую я использую для сбора некоторых данных. Имеет более 50 столбцов. У меня есть еще один for loop и if loop, которые я использую для отправки электронного письма, если некоторые из значений, которые введены, находятся за пределами диапазона. Я использую onFormSubmit триггер события.

Когда я console.log, мой массив значений. Некоторые значения null, однако в электронной таблице есть значения с определенным номером столбца. Я предполагаю, что из-за больших данных программе не хватает времени для обработки, чтобы поместить ее в массив и запустить функцию MailApp. Это когда-нибудь случалось с кем-нибудь?

Мои журналы выполнения показывают выполненные без ошибок, но некоторые значения отсутствуют или, скорее, null

1 Ответ

2 голосов
/ 11 ноября 2019

Поскольку вы написали, что это выполняется дважды, и второй раз с пустыми данными, это звучит как проблема, когда триггер onFormSubmit() запускается дважды. Похоже, это ошибка скрипта приложения, но пользователи переполнения стека JG и Cooper предоставили полезный обходной путь : проверьте значение требуемого вопроса. Поэтому просто включите 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});
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...