Google Sheets: Как определить, когда все операции загрузки данных завершены?

У меня есть электронная таблица Sheets, в которой есть много ячеек, использующих пользовательскую функцию, которая вызывает IMPORTHTML и анализирует результаты. Другие вычисления в листе используют возвращенные значения из этих ячеек пользовательских формул. Как и ожидалось, при вычислении ячеек пользовательской формулы отображается сообщение об ошибке "Загрузка данных...". Я не могу доверять результатам зависимых вычислений, пока не завершены операции загрузки данных. Есть ли хороший способ узнать, когда все операции загрузки данных в пределах диапазона завершены?

7 ответов

Я была такая же проблема.

cell1: url

cell2: использует URL-адрес в importdata

cell3: использует cell2 в importdata

Я знаю, что это множество связанных результатов.

Поэтому я протестировал все варианты, которые смог найти.

Судите сами. В анимации я изменяю URL-адрес, чтобы он вызывал новый запрос, и вы могли видеть, как влияют на различные средства проверки при извлечении данных.

Вот запросы для вашего удобства.

      =IFNA(E27,"Waiting for data")
=IFERROR(E27,"Waiting for data")
=If(ISERROR(E27),"Waiting for data",E27)
=IF(E27<>"",E27,"Waiting for data")
=COUNTIF(E27,"<>*")

Если у вас их много, возможно, вы захотите избежать повторных вычислений (множество HTTP-запросов параллельно). Для этого загляните в /questions/49908255/kak-sdelat-gugl-list-formulu-prosto-rasschitat-odin-raz/55350888#55350888

Это сработало для меня:

=COUNTIF(B1:B565,"<>*")

для подсчета количества клеток, показывающих "Loading..." при использовании =IMPORTXML()функция листа Google. Например, в одной конкретной ситуации у меня было 565 ссылок в первом столбце и формула =IMPORTXML(A1,"//h2[@class='margin-bottom-50']")в столбце 2 и поместил формулу выше в D1. Я дважды проверил, перетащив =countif(B1,"<>*") вниз в столбец 3, чтобы визуально проверить, а затем с помощью =SUM() сложил все единицы в этом столбце.

Допустим, ошибки "Загрузка данных" можно найти на Листе 1, который состоит из столбцов AZ и строк 1-1000. В Sheet2!A1 можно поставить =IF(COUNTIF(Sheet1!A:Z,"#Loading Data..."),"Loading","Done"), (Замените Z в A:Z последним столбцом.) Если какие-либо ячейки в Sheet1 возвращают "#Loading Data...", то счетчик подсчитает их и вернет "Загрузка"; иначе он вернет "Готово".

(Примечание. Является ли сообщение об ошибке именно тем, что я использовал? Сейчас я не могу проверить это, и я не уверен, что это именно тот вывод)

С функцией запроса это возможно. Предполагая функции importhtml в столбце E и модель данных, которая возвращает, например, URL-адреса, можно построить счетчик, который будет установлен на 0, когда все функции очистки будут завершены:

      =Count(E1:E)-query(E1:E; "Select count(E) where E contains 'http' label count(E)''")

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

С помощью скрипта Google Apps вы можете создать правило, которое уведомляет вас по электронной почте, когда целевая ячейка равна 0, поэтому у вас уже есть предупреждение о завершении парсинга.

Пытаться IF(IsError(a:Z),"Not Ready Yet","Ready")

Используйте это, оно будет содержать несколько столбцов/строк в диапазоне.=IF(SUMPRODUCT(ISERROR(range))>0,"Loading","Ready")

К сожалению,=COUNTIF(range,"<>*")будет подсчитывать пустые ячейки в диапазоне после загрузки.

Теперь вы можете использовать ERROR.TYPE(ячейка с формулой импорта).

ERROR.TYPE(ячейка с формулой импорта)=10 означает, что она все еще загружается. Если он возвращает N/A, это означает, что все сделано.