Отлов ошибок #REF в скрипте Google Apps

Я пишу программу в Google Spreadsheet API для Google App Script, которая ссылается на ячейки отображаемых значений на листе для формулирования функций QUERY(), а затем возвращает результат этой сформулированной функции QUERY() в разные ячейки.

Поскольку при формулировании этих функций запроса используется много изменяющихся переменных (я ссылаюсь на ячейку, отвечающую за исходный лист, за столбец, который нужно искать, и за точку данных, которую необходимо вернуть), сформулированные функции запросов часто имеют # Ошибки REF или #N/A. Хотя этого легко избежать для меня, программа предназначена для клиента, и поэтому я должен иметь более информированные сообщения об ошибках, чтобы кто-то мог легко понять проблему.

введите здесь описание изображения

В данном случае здесь я ссылаюсь на лист «Коммунальные предприятия» для столбца «Название коммунального предприятия», а затем возвращаю соответствующее значение «Адрес». поскольку «Ошибка» не отображается в столбце «Имя коммунального предприятия» на листе «Коммунальные предприятия», при попытке вернуть соответствующий адрес возникает ошибка #Н/Д.

Я попробовал оператор try-catch, но он, похоже, не распознал ошибку:

   try{
    //This is assigning the assembled QUERY() formula to a cell 
    //(works successfully & reliably)
      retrieveRange.getRange().getCell(k+1, 1).setFormula(formulaArray[k]);
    } catch (e){
    //Never catches an error, and therefor never logs the following-
      Logger.log("Error Recognized:" + e);
    }

Как мне поймать эти ошибки? И, кроме того, как я могу сообщить о специальном сообщении об этих ошибках?

Большое спасибо!


person Jaden Ranzenberger    schedule 13.09.2018    source источник
comment
Я думаю, что эта тема может быть полезна для вашей ситуации. stackoverflow.com/ вопросы/49161874/   -  person Tanaike    schedule 13.09.2018
comment
Спасибо - это полезная функция. Однако я не знаю, как вернуть пользовательские сообщения об ошибках.   -  person Jaden Ranzenberger    schedule 13.09.2018
comment
Это можно легко решить с помощью вспомогательного столбца и if. Сначала запустите запрос во вспомогательном столбце, затем скопируйте и вставьте значение каждой ячейки в этом столбце в нужный столбец с помощью цикла. Если значение ячейки равно #ССЫЛКА!, напишите пользовательскую ошибку для #ССЫЛКА! в место назначения, если значение ячейки #N/A, напишите пользовательскую ошибку для #N/A в место назначения... Некоторый рабочий код: var error = ss.getRange("E9").getValue() if(error == "#REF!") { ss.getRange("E10").setValue("REF") } else if (error == "#N/A") { ss.getRange("E10").setValue("N/A") }   -  person HaPhan    schedule 13.09.2018
comment
Попробуйте этот лист docs.google.com/spreadsheets/d/ для справки. Вставка этих ошибок из F1, G1, H1, I1 в K1 создаст сообщение, соответствующее этой ошибке в E10.   -  person HaPhan    schedule 13.09.2018
comment
@HaPhan Спасибо. Мне нравится эта идея вспомогательного столбца, чтобы уменьшить количество ошибок, появляющихся непосредственно в рабочем столбце! Похоже, что нет более интуитивно понятного варианта для обнаружения ошибок, чем использование вспомогательного столбца, это своего рода обходной путь. Можно ли добавить собственные сообщения об ошибках? Когда в ячейке находится ошибка ссылки и вы наводите на нее курсор, возможное сообщение: Запрос завершен с пустым выводом. Можно ли изменить это сообщение с помощью пользовательских символов?   -  person Jaden Ranzenberger    schedule 13.09.2018
comment
Причина, по которой ваша catch никогда не работает, заключается в том, что ваша setFormula функция всегда успешна. Ошибка, которую вы получили в ячейке, вызвана не вашим кодом, а функцией Google Spreadsheet. Я не думаю, что есть какой-либо способ возиться с этими всплывающими окнами, поскольку они встроены, и в настоящее время действительно нет функции/скрипта, которые позволяют их изменять, хотя есть функция под названием ERROR.TYPE, которая является версией функции листа того, что я написал в тестовом листе, которым я поделился с вами.   -  person HaPhan    schedule 14.09.2018
comment
Ааа ладно. Большое спасибо за Вашу помощь! Я воспользуюсь листком, который ты мне прислал.   -  person Jaden Ranzenberger    schedule 15.09.2018