Я пишу программу в 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);
}
Как мне отловить эти ошибки? И, кроме того, как мне сообщить о настраиваемом сообщении об ошибке для этих ошибок?
Большое спасибо!
Спасибо - это полезная функция. Однако я не знаю, как вернуть настраиваемые сообщения об ошибках.
Это можно легко решить с помощью вспомогательной колонки и if
. Сначала запустите запрос в вспомогательном столбце, затем скопируйте и вставьте значение каждой ячейки в этом столбце в нужный столбец с помощью цикла. Если значение ячейки равно «#REF!», Напишите пользовательскую ошибку для «#REF!» в пункт назначения, если значение ячейки "# 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") }
Попробуйте этот лист docs.google.com/spreadsheets/d/… для справки. Вставка этих ошибок из F1, G1, H1, I1 в K1 сгенерирует сообщение, соответствующее этой ошибке в E10.
@HaPhan Спасибо - мне нравится эта вспомогательная колонка Идея для уменьшения ошибок, отображаемых непосредственно в рабочем столбце! Похоже, что нет более интуитивного способа отлова ошибок, чем использование вспомогательного столбца - это своего рода обходной путь. Можно ли добавлять собственные сообщения об ошибках? Когда ошибка ссылки находится в ячейке, и вы наводите на нее курсор, может появиться сообщение «Запрос выполнен с пустым выводом». Можно ли изменить это сообщение с помощью пользовательских символов?
Причина, по которой ваш catch
никогда не работает, заключается в том, что ваша функция setFormula
всегда работает успешно. Ошибка, которую вы получили в ячейке, вызвана не вашим кодом, а функцией Google Spreadsheet. Я не думаю, что есть способ повозиться с этими всплывающими окнами, поскольку они встроены, и в настоящее время действительно нет функции / сценария, позволяющего их изменять, хотя есть функция под названием ERROR.TYPE
, которая является версией функции листа того, что я написал в тестовом листе, которым поделился с вами.
Ага, ладно. Большое спасибо за Вашу помощь! Я воспользуюсь тем листом, который вы мне прислали.
Я думаю, что эта ветка может быть полезна в вашей ситуации. stackoverflow.com/questions/49161874/…