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(SUMPRODUCT(ISERROR(range))>0,"Loading","Ready")
К сожалению,=COUNTIF(range,"<>*")
будет подсчитывать пустые ячейки в диапазоне после загрузки.
Теперь вы можете использовать ERROR.TYPE(ячейка с формулой импорта).
ERROR.TYPE(ячейка с формулой импорта)=10 означает, что она все еще загружается. Если он возвращает N/A, это означает, что все сделано.