ОК, похоже, что проблема была в том, пробеги. Следовательно, он не повторно подключается к API и не повторно извлекает цену, он просто возвращает предыдущий результат скрипта, который был кэширован.
Смотреть подробнее здесь: https://code.google.com/p/google-apps-script-issues/issues/detail?id=888
и здесь: Script to summarise data not updating
Мое решение было добавить еще один параметр, чтобы мой сценарий, который я даже не использовать. Теперь, когда вы вызываете функцию с параметром, отличным от предыдущих вызовов, ему придется перезапустить скрипт, потому что результат для этих параметров не будет в кеше.
Поэтому всякий раз, когда я вызываю функцию, для дополнительного параметра передаю «$ A $ 1». Я также создал пункт меню refresh, и когда я его запустил, он помещает текущую дату и время в A1, поэтому все вызовы сценария с $ A $ 1 в качестве второго параметра должны будут пересчитываться. Вот код из моего сценария:
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Refresh",
functionName : "refreshLastUpdate"
}];
sheet.addMenu("Refresh", entries);
};
function refreshLastUpdate() {
SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
}
function getPrice(itemId, datetime) {
var headers =
{
"method" : "get",
"contentType" : "application/json",
headers : {'Cache-Control' : 'max-age=0'}
};
var jsonResponse = UrlFetchApp.fetch("http://someURL?item_id=" + itemId, headers);
var jsonObj = eval('(' + jsonResponse + ')');
return jsonObj.Price;
SpreadsheetApp.flush();
}
И когда я хочу поставить цену товара с идентификатором 5 в ячейке, я использую следующую формулу:
=getPrice(5, $A$1)
Когда я хочу, чтобы обновить цены, я просто нажимаю пункт меню «Обновить» -> «Обновить». Помните, что вам необходимо перезагрузить таблицу после изменения сценария onOpen()
.
Да, вот объяснение, которое я сделал по этому поводу: http://stackoverflow.com/questions/9022984/google-apps-script-to-summarise-data-not-updating/9023954#9023954 –
Я прочитал ваше объяснение как часть моих исследований. Очень полезно, спасибо. Я добавил ссылку на мой ответ. – tbkn23
Для тех, кто сталкивается с подобным (определенным и логичным, но иногда неудачным) поведением, он может помочь продвинуть этот запрос функции в Google Issue Tracker: https://issuetracker.google.com/issues/36763858. –