Обновить ИмпортHTML

У меня есть лист, который импортирует данные с помощью ImportHTML. Данные меняются довольно часто, есть ли способ, чтобы Google Таблицы автоматически обновляли данные?

Я попытался добавить & year(now()) & month(now()) & day(now()) & hour(now()) & minute(now()), в формулу, но получаю следующую ошибку:

Эта функция не может ссылаться на ячейку с помощью NOW(), RAND() или RANDBETWEEN().


person DasPete    schedule 11.11.2015    source источник


Ответы (2)


"В любом случае"? Да, но, как уже упоминал Могсдад по поводу этих частей, «с момента прекращения использования функции GOOGLECLOCK не существует формулы, которая запускала бы автоматический перерасчет».

Использование скрипта Google Apps и что-то вроде...

function getData() {
  var queryString = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmss");
  var cellFunction = '=IMPORTHTML("<your-url>?' + queryString + '","<your-query>",<your-index>)';

  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("<your-sheet>").getRange('<your-cell>').setValue(cellFunction);
}

... должно привести вас туда. После сохранения, присвоения имени и авторизации скрипта настройте триггер, чтобы он запускал/обновлял данные так часто, как вам нужно.

person Greg    schedule 21.12.2015

Очень поздно с вопросом. Недавно мне пришлось сделать нечто подобное. Я подумал, что напишу что-нибудь здесь, чтобы другие могли найти для себя что-то полезное... надеюсь.

Случай использования
Я хотел, чтобы моя таблица Google вызывала IMPORTDATA по определенному URL-адресу каждые несколько минут, потому что данные, хранящиеся по этому URL-адресу, изменялись с помощью триггера таймера и триггера Http. Функция Azure.
По сути, я хотел, чтобы моя таблица Google обновлялась каждые 5 минут, потому что я знал, что данные по URL-адресу постоянно меняются.

Что я пробовал:
Я начал со сценария, похожего на то, что упоминал @greg. (Приветствую вас.) Я установил триггер таймера для этого скрипта на 5 минут. Все выглядело симпатично.

Проблемы
Я понял, что установка функции в качестве значения в ячейке приводила к тому, что функция запускалась только в начале, когда лист был пуст. При втором срабатывании триггера лист не обновлялся. Так что я попытался

cell.setValue("");
cell.setValue('=IMPORTDATA("my-url")');

Не повезло. Лист не обновился новыми данными. Казалось, что лист увидел, что устанавливаемое значение в ячейке совпадает с существующим значением, поэтому не стал перезапускать функцию.

Чтобы подтвердить свою гипотезу,
я попробовал вручную:

  1. Вырежьте функцию IMPORTDATA из ячейки гугл листа.
  2. Вставьте значение обратно в ячейку.

Лист не обновлялся.

Но когда я попытался вручную:

  1. Удалить/изменить URL из/в ячейке. Нажмите Enter.
  2. Снова вставьте формулу в ячейку. Нажмите Enter.

Это сработало. Таким образом, кажется, что cell.SetValue() или даже cell.setFormula() просто не перезапускают функцию, которую я устанавливал, потому что та же самая функция существовала в ячейке с самого начала.

Мое решение лучше всего подходит для моего варианта использования:
Поскольку данные по URL-адресу, на который я указывал, уже были в формате CSV, я сделал что-то вроде этого:

  var firstSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var text = UrlFetchApp.fetch(url).getContentText();   //gets the data.
  var csv = Utilities.parseCsv(text);                   //parses the data.
  var range = firstSheet.getRange(1, 1, csv.length, 17) //getting the range.
  range.setValues(csv);                                 //setting the data.

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

Вы можете сделать то же самое, предположив, что хотите получить содержимое таблицы или диаграммы и сохранить значения на листе.

person Yash Karan Singh    schedule 14.08.2020