Каковы характеристики обновления функций импорта электронных таблиц Google?

8

Когда я загружаю электронную таблицу, импортированные данные не всегда соответствуют исходным страницам. Когда это происходит, обновление F5 не помогает. Также не Ctl-F5. Видимо происходит какое-то кеширование.

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

Ссылка на документ: http://docs.google.com/support/bin/answer.py?answer=75507.

Крис Но
источник
1
Ты пробовал взломать Крис?
Джейкоб Ян Туинстра

Ответы:

5

Согласно этой теме на форуме Документов Google , данные должны обновляться примерно каждый час.

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

Я использовал простой способ добавления параметра, который обновляется каждую минуту.

Вызов функции: = ImportHtml ("http://www.fifa.com/worldcup/standings/index.html?" & H81; "table"; 4)

Формула в H81: = минута (сейчас ())

Это делает трюк для меня.

mvark
источник
2
Действительно хороший :)
Lipis
1
Интересно, они говорят каждый час. Кажется, я получаю мгновенные данные при каждой загрузке страницы. Это до тех пор, пока оно не остановится. Возможно, наступает 1-часовая задержка. Но в чем заключается рифма или причина блокировки. Я попробую твой взлом, когда это произойдет. Спасибо.
Крис Но
1
В настоящее время предложенная формула возвращает «Ошибка: этой функции не разрешено ссылаться на ячейку с NOW (), RAND () или RANDBETWEEN ()»
Рубен
4

Короткий ответ

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

объяснение

Из Изменить язык, часовой пояс, пересчет и язык таблицы , справочную статью из официальной документации,

Примечание. Функции внешних данных пересчитываются через следующие интервалы:

  • ImportRange: 30 минут
  • ImportHtml, ImportFeed, ImportData, ImportXml: 1 час
  • GoogleFinance: 2 минуты

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

Временное решение

Один из способов принудительного пересчета формул с помощью функций импорта заключается в объединении с URL детерминированного, но безобидного параметра.

пример

В следующем примере «#rev =» & A2 добавляется к исходному URL

A1: https://en.wikipedia.org/wiki/List_of_gravitationally_rounded_objects_of_the_Solar_System
A2: 1
A3: 4
A4:=IMPORTHTML(A1&"#rev="&A2,"table",A3)

Каждый раз, когда изменяется любое из значений или A1, A2 или A3, формула будет пересчитываться. Мы можем изменить значение A2, чтобы «принудительно» обновить таблицу 4 с URL-адреса в A1.

Пользовательский интервал обновления времени для функций импорта

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

/**
 *
 * Updates at the interval set in the time driven trigger configuration
 * a cell value to be used as a deterministic bu unnicouus URL parameter 
 *
 */
function forceRefresh() {
  //Cell addrees of the deterministic but unnicouos URL parameter
  var reference = 'Sheet1!A2';   
  var rng = SpreadsheetApp.getActiveSpreadsheet().getRange(reference);
  rng.setValue(rng.getValue()+1);
}

Ссылки

Рубена
источник
0

Еще одна альтернатива, которая не зависит от модификации ссылки:

= if (Minute (Now ()) = Minute (Now ()), ImportHtml (" http://www.fifa.com/worldcup/standings/index.html ?"; "table"; 4), "")

Так Minute(Now())=Minute(Now())как всегда true, if всегда будет возвращать ImportHtml

VDizzle
источник
Откуда вы знаете, что полученные данные являются последней версией, а не кэшированной версией?
Рубен
-1

Выберите «Файл»> «Настройка электронной таблицы ...» и убедитесь, что оба листа находятся в одном и том же языковом стандарте, и если ответы поступают от Jotforms, задайте там один и тот же языковой стандарт.

Элси Купер
источник
-2

Принудительно пересчитать importrange путем восстановления формулы ячейки

Необходимые:

Импортированные данные - Ваша цель, куда все будет скопировано.

Конфигурация импортированных данных - имеет следующие поля:

+ --------------------------------------------- + --- ----------------------------- +
| A | Б |
+ --------------------------------------------- + --- ----------------------------- +
| Импортировать данные из электронной таблицы с ключом: | ключ |
| Импорт данных из электронной таблицы в диапазоне: | A: AA |
| Импортированные данные выберите столбцы: | ВЫБРАТЬ * |
| Критерии импортируемых данных: | ГДЕ Col2 содержит 'XYZ' |
| Импортируемые данные должны быть упорядочены по столбцу: | ЗАКАЗАТЬ на Col2 |
+ --------------------------------------------- + --- ----------------------------- +

Автор сценария:

function onOpen() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
}
catch(err)
{
Browser.msgBox(err);
}

var configsheet = ss.getSheetByName("Imported Data Config");

var configkey = configsheet.getRange("B1").getValue();
var configrange = configsheet.getRange("B2").getValue();
var configselect = configsheet.getRange("B3").getValue();
var configwhere = configsheet.getRange("B4").getValue();
var configorderby = configsheet.getRange("B5").getValue();

var importedsheet = ss.getSheetByName("Imported Data");
importedsheet.getRange("A1").setValue('=QUERY(IMPORTRANGE("' + configkey + '","' + configrange + '"),"' + configselect + ' ' + configwhere + ' ' + configorderby + '")');

SpreadsheetApp.flush();

// Solution of sourcecode is: http://stackoverflow.com/questions/13631584/how-can-i-force-a-recalculation-of-cell-using-importrange-function-in-a-google-s
// OnOpen Trigger: https://developers.google.com/apps-script/understanding_triggers
// Active Spreadsheet solution: https://productforums.google.com/forum/#!topic/docs/XIY0WNX0uL8

Browser.msgBox("Sync Complete!");
}

Это позволяет изменить формулу без редактирования сценария и упростить перенос сценария по различным листам.

ПРИМЕЧАНИЕ. Это больше не требуется в новых листах Google, выпущенных в мае 2014 года.

user58180
источник
3
Спасибо за публикацию. Вы, кажется, добавляете это к довольно многим вопросам здесь на SE. Это на самом деле помогает ОП?
Джейкоб Ян Туинстра
-3

Минута теперь работает очень хорошо (и вы можете просто включить это в формулу вместо ссылки на ячейку).

Однако с некоторыми URL-адресами это не работает и, по-видимому, меняет саму ссылку и может ссылаться на другой лист.

Я не собираюсь быть конкретным, но ссылка заканчивается, например, на:

.....ranking?ranking=xp_total&table=0"&Minute(Now()),"table",4)

испортит саму ссылку. Не полное доказательство решения, но все еще работает, вероятно, для 90% ссылок, которые люди используют.

Эрик Моз
источник
2
В настоящее время Google Sheets не позволяет использовать недетерминированные функции для функций импорта.
Рубен