Скрипт Google Sheet выполняется не полностью

#google-apps-script #google-sheets #triggers #google-forms

#google-apps-script #google-sheets #триггеры #google-формы

Вопрос:

Я использую форму Google для запуска этого скрипта.
Когда я запускаю скрипт с помощью кнопки воспроизведения, он работает идеально.
Когда я запускаю триггер onsubmit, флажок заполняется нормально, но дата setValue — нет.
Я также пробовал использовать setFormula , но получаю тот же результат.

 function AddCheckBox_toSchoolLunchForm(F) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1")
  var criteria = SpreadsheetApp.DataValidationCriteria.CHECKBOX;
  var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build();
  var range = sheet.getRange(sheet.getLastRow(), 8);
  range.clearContent();
  range.setDataValidation(rule);
  var FormulaCell = sheet.getRange(sheet.getLastRow(), 10);
  FormulaCell.setFormula("=DATEVALUE(A"   (sheet.getLastRow())   ")");
}
  

Пример результата ручного запуска кода

Пример результата запуска запущенного кода

Конечная цель состоит в том, чтобы столбец J заполнялся датой в формате shot из столбца A каждый раз при отправке формы.
Мне нужен этот формат для запуска countIfs на другом листе.

Другим вариантом было бы каким-то образом встроить тег format в эту команду CountIfs, чтобы они совпадали.

 =COUNTIFS('Form Responses 1'!J:J,A2,'Form Responses 1'!D:D,B2)
  

Ответ №1:

ОБНОВЛЕННЫЙ ОТВЕТ

Если у вас возникли проблемы с запуском функции на триггере, в то время как она работает по назначению без триггера, проверьте следующее:

  • Для тяжелых файлов / данных формы это может привести к задержке заполнения листа новыми данными формы.

    • Чтобы избежать конфликтов, дайте электронной таблице некоторое время для заполнения новой строки перед извлечением sheet.getLastRow() или доступом к данным на листе.

    • Вы можете легко расставить точки, например, с помощью Utilities.sleep().

  • Убедитесь, что ваш триггер установлен правильно. Для этого проверьте, что

    • тип триггера правильный
    • триггер привязан к правильной функции
    • избегайте конфликтов, создавая новый триггер при переименовании функции.
  • Убедитесь, что проблема не связана с ограничениями запуска

  • Это распространенный источник ошибок при использовании простых триггеров.

  • Проверьте, что учетная запись, под авторизацией которой выполняется триггер, имеет разрешения на редактирование листа / диапазона. Это важно для проверки, когда владельцем триггера является другой человек, а не человек, который запускает скрипт вручную.

  • Обратите внимание, что для setFormula() нет необходимости включать = в формулу

  • Обратите внимание, что DATEVALUE() возвращает ожидаемый результат только тогда, когда ячейка правильно отформатирована как дата

Комментарии:

1. Я попытался добавить режим ожидания в двух местах, и это не увенчалось успехом. В настоящее время я единственный, кто использует это в ситуации тестирования.

2. Не могли бы вы поделиться своей электронной таблицей для устранения неполадок? И, возможно, также форма, если нет конфиденциальной информации.

3. Электронная таблица: docs.google.com/spreadsheets/d /…

4. Форма: docs.google.com/forms/d/e /…

5. Спасибо, что предложили помощь