Обработка и изменение исключения, возвращаемого, когда Google Sheets = query () возвращает # N / A - PullRequest
0 голосов
/ 07 июня 2019

У меня есть запрос, который выполняется в Google Sheets для таблицы, где у пользователя есть отдельный вход, который может изменять значения в логических проверках, чтобы получить ИСТИННЫЙ ЛОЖНЫЙ результат для этой таблицы.Возможно, у пользователя есть выборка, которая возвращает все FALSE для оператора where в запросе.

Вывод, который я получаю, # N / A, я хочу иметь возможность создать исключение, в котором я могу определитьчто он возвращает # N / A и меняет вывод на пустое или «Результаты не найдены».

Мои пользователи не очень разбираются в технологиях, поэтому мне нужно, чтобы он был разборчивым для кого-то без знания или опыта кодирования.

Обычно, когда мне возвращают ошибку из функции в Google Sheets или Excel, я использую функцию =Iferror() для управления выводом исключения ошибки.Это, похоже, не работает, либо потому, что функция iferror была создана с областью действия, выходящей за пределы = query, либо из-за какой-то другой скрытой структурной проблемы.

FALSE,  PIG,    $5.50

FALSE,  APPLE,  $0.50

FALSE,  CAR,    $25.00

FALSE,  HORSE,  $20.00

Тогда я подумал, что мог быдобавьте оператор if() и поместите запрос в логический оператор, проверяя значение «N / A»:

if(query(A:B,"select B where A =TRUE")="#N/A","No results found",(A:B,"select B where A = TRUE"))

Это не сработало.Значение, которое было возвращено, все еще было "# N / A".Поэтому я подумал, что, возможно, тип значения исключения технически не является строковым значением, поэтому он не примет значение, не являющееся строкой # N / A, равным «# N / A», поэтому я обернул первый запросв concatenate() в попытке перевести его в единственное значение переменной / ячейки.Я знаю, что это работает, превращая запрос, он запускается в единственную строку, если он дает результаты, но делает это:

if(concatenate(query(A:B,"select B where A =TRUE"))="#N/A","No results found",(A:B,"select B where A = TRUE"))

Это все еще возвращает "# N / A"

Я думал, что возможнофактическое значение, которое он отбрасывает, является значением типа NULL, и у него есть некоторые хитрые закулисные махинации, чтобы он отображал «# N / A», когда функция where отфильтровывает все результаты.поэтому я изменил проверяемый параметр в операторе if с "# N / A" на "" следующим образом:

=if(concatenate(query(lookup!Z2:AN,"select Z where AN = TRUE"))="","No results found",query(lookup!Z2:AN,"select Z where AN = TRUE"))

Это по-прежнему возвращает "# N / A"

IЯ подумал, что, возможно, функция isblank() будет иметь какой-то механизм, который обнаружит, что он пустой, и изменит его на:

=if(ISBLANK(concatenate(query(lookup!Z2:AN,"select Z where AN = TRUE"))),"No results found",query(lookup!Z2:AN,"select Z where AN = TRUE"))

Это также все еще возвращает "# N / A"

I 'м в недоумении.Я ожидаю, что это вызовет у меня исключение, которое я квалифицирую: «Результаты не найдены», но этого никогда не произойдет.Очевидно, я не понимаю природу того, как функция =query() обрабатывает данные в бэкэнде вещей.Он должен делать что-то на отдельном слое операций или что-то, или иметь совершенно другую область, но как я должен выяснить, что это за переменная / процесс?

1 Ответ

0 голосов
/ 07 июня 2019

Не просто IFERROR ?:

=iferror(query(A:B,"select B where A =TRUE"),"No results found")
...