Выявление ошибок #REF в скрипте Google Apps

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

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

Выявление ошибок #REF в скрипте Google Apps

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

Я попробовал команду 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);
    }

Как мне отловить эти ошибки? И, кроме того, как мне сообщить о настраиваемом сообщении об ошибке для этих ошибок?

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

Я думаю, что эта ветка может быть полезна в вашей ситуации. stackoverflow.com/questions/49161874/…

Tanaike 13.09.2018 04:55

Спасибо - это полезная функция. Однако я не знаю, как вернуть настраиваемые сообщения об ошибках.

Jaden Ranzenberger 13.09.2018 05:14

Это можно легко решить с помощью вспомогательной колонки и 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") }

HaPhan 13.09.2018 11:45

Попробуйте этот лист docs.google.com/spreadsheets/d/… для справки. Вставка этих ошибок из F1, G1, H1, I1 в K1 сгенерирует сообщение, соответствующее этой ошибке в E10.

HaPhan 13.09.2018 12:08

@HaPhan Спасибо - мне нравится эта вспомогательная колонка Идея для уменьшения ошибок, отображаемых непосредственно в рабочем столбце! Похоже, что нет более интуитивного способа отлова ошибок, чем использование вспомогательного столбца - это своего рода обходной путь. Можно ли добавлять собственные сообщения об ошибках? Когда ошибка ссылки находится в ячейке, и вы наводите на нее курсор, может появиться сообщение «Запрос выполнен с пустым выводом». Можно ли изменить это сообщение с помощью пользовательских символов?

Jaden Ranzenberger 13.09.2018 17:28

Причина, по которой ваш catch никогда не работает, заключается в том, что ваша функция setFormula всегда работает успешно. Ошибка, которую вы получили в ячейке, вызвана не вашим кодом, а функцией Google Spreadsheet. Я не думаю, что есть способ повозиться с этими всплывающими окнами, поскольку они встроены, и в настоящее время действительно нет функции / сценария, позволяющего их изменять, хотя есть функция под названием ERROR.TYPE, которая является версией функции листа того, что я написал в тестовом листе, которым поделился с вами.

HaPhan 14.09.2018 06:01

Ага, ладно. Большое спасибо за Вашу помощь! Я воспользуюсь тем листом, который вы мне прислали.

Jaden Ranzenberger 14.09.2018 23:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
1 293
0

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

Гарантия взаимного исключения при доступе и изменении данных таблицы Google в скрипте приложения
Передать входное значение радио в качестве параметра в google.script.run.withSuccessHandler
Добавьте дополнительного получателя в электронное письмо со сводкой сбоев, отправленное с помощью скрипта Google Apps
Аутентификация учетной записи службы из скрипта приложений
Как повторно авторизовать скрипты Google Apps после сброса пароля?
Динамическое создание изображения из шаблонного, стилизованного HTML с помощью скрипта приложений Google
Невозможно использовать сращивание с массивом из строкового среза
Триггер скрипта приложения Google не записывает данные на другие листы в той же таблице
Возможно ли, чтобы "источник страницы просмотра" возвращал разные данные в "UrlFetchApp" скриптов Google?
Сортировка произвольного диапазона Google Sheets Script без вставки результата