SpreadsheetApp.getUi(). Alert() перехватывается как исключение, когда скрипт запускается FormSubmit; Отлично при интерактивном запуске

Ниже приведен код, который, несмотря на ui.alert("Some message") код запускается только когда SpreadsheetApp.getUi() может получить пользовательский интерфейс (при запуске в интерактивном режиме) с ошибкой TypeError: Cannot read property 'alert' of undefined at sendEmails(E-mail form submissions:76:32)

var DisplayAlerts = 0

// See if getUi will load; If not, we are likely not running this script interactively, so disable prompts
try
{
  var ui = SpreadsheetApp.getUi();
}
catch(err)
{
  DisplayAlerts = 1
}

if(DisplayAlerts){ui.alert("E-mail(s) sent");}

Скрипт на https://xfanatical.com/blog/how-to-edit-google-forms-responses-in-the-spreadsheet/ использоватьSpreadsheetApp.getUi().alert()и выполняется в интерактивном режиме (выводится приглашение в строке 119) и через триггер отправки формы. Какая разница в этом сценарии с моим логином выше? Что мне нужно сделать, чтобы два разных скрипта не выполняли одно и то же, на панели всплывающих предупреждений при работе в интерактивном режиме?

1 ответ

Я обнаружил, что если запустить его так:

var DisplayAlerts =true;
try{
  var ui = SpreadsheetApp.getUi();
}
catch(err) {
  DisplayAlerts = false;
}
if(DisplayAlerts){ui.alert("E-mail(s) sent");}

Он не получает предупреждение в formSubmit, потому что он открывает экземпляр Spreadsheet на сервере, у которого есть какой-либо пользовательский интерфейс. И когда я запускаю другой скрипт из редактора скриптов, предупреждение срабатывает правильно, потому что оно запускается каждый раз, когда вы запускаете функцию, и я открыл электронную таблицу контейнера, чтобы у нее был пользовательский интерфейс.

Итак, я думаю, проблема в том, что у вас поменяли местами 0 и 1 или истинное и ложное.

Другие вопросы по тегам