4

我按照这个甜蜜的 Medium 教程设置了将 JSON 导入 Google 电子表格。

它做得很好 - 接受这个 API 调用

[
  {"day":"2015-08-05","new_users":103},
  {"day":"2015-08-06","new_users":255},
  {"day":"2015-08-07","new_users":203},
  {"day":"2015-08-08","new_users":198},
  {"day":"2015-08-09","new_users":273},
  {"day":"2015-08-10","new_users":373},
  {"day":"2015-08-11","new_users":189},
  {"day":"2015-08-12","new_users":228},
  {"day":"2015-08-13","new_users":167}
]

并将其转换为:

在此处输入图像描述

但是,如您所见,此 API 每天都会更新。因此,我希望在打开工作表时刷新此 API 调用 - 不仅在编辑单元格时。

研究了很多,还尝试添加触发器,但到目前为止我的尝试都失败了。这不应该这么难......有什么想法吗?我错过了什么吗?

稍后我还将添加和奖励赏金 (50),因为这对我来说非常重要。

4

2 回答 2

3

正如 EugZol 指出的那样,解决方案正在向 URL 添加一个参数。然而,它不能通过谷歌电子表格工作CONCATENATE——这导致了加载错误——至少对我来说是这样。

最后我不得不调整 JavaScript 函数ImportJSONAdvanced

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var url = url + "?" + (Math.ceil(new Date().getTime() / 1000));
  var jsondata = UrlFetchApp.fetch(url);
  var object   = JSON.parse(jsondata.getContentText());

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

我添加了这一行:

var url = url + "?" + (Math.ceil(new Date().getTime() / 1000));

通过 JavaScript 获取当前时间并将其附加到url- 我将其除以 1000 并用于.ceil获取秒数而不是毫秒数。

这样,电子表格最终会自动更新 API 调用。

旁注:它每 15 分钟执行一次 - 我假设实施了时间限制 - 但就我而言,这完全没问题。

于 2015-08-18T11:59:59.390 回答
1

常规缓存破坏 URL 参数技术将在这里工作:

=ImportJSON(CONCATENATE("http://dwh-platogo.herokuapp.com/q/zn4m?", YEAR(NOW()),MONTH(NOW()),DAY(NOW())))

这将向 URL 添加?20150817(因为它是今天的 8 月 17 日)参数,从而防止 Google 缓存它(它将每天更新)。

您还可以添加当前小时以强制它每小时更新。

于 2015-08-17T17:20:39.963 回答