自动更新ImportJSON

时间:2015-08-14 13:07:56

标签: google-apps-script import google-sheets auto-update custom-function

我设置了following this sweet Medium tutorial将JSON导入Google Spreadsheets。

它做得很好 - 接受这个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}
]

并将其转换为:

enter image description here

但是,正如您所看到的,此API每天都会更新。因此,当我打开工作表时,我希望这个API调用能够刷新 - 不仅仅是在编辑单元格时。

researched a ton,还尝试添加触发器,但到目前为止我的尝试都失败了。 这不应该是这么难...任何想法?我错过了什么吗?

我还会添加&奖励赏金(50),因为这对我来说非常重要。

2 个答案:

答案 0 :(得分:3)

解决方案是在EugZol指出的URL中添加一个参数。但是,它没有通过Google电子表格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));

它得到current time via JavaScript并将其附加到url - 我将其除以1000并使用.ceil来获取秒而不是毫秒。

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

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

答案 1 :(得分:1)

常规缓存清除URL参数技术将在此处起作用:

Error on line 43 in C:\Windows\TEMP\fxbundler8328922406343131203\images\win-exe.image\MyProgram.iss: Value of [Setup] section directive "SignTool" is invalid.
Compile aborted.

这会将=ImportJSON(CONCATENATE("http://dwh-platogo.herokuapp.com/q/zn4m?", YEAR(NOW()),MONTH(NOW()),DAY(NOW()))) (今天是8月17日)参数添加到网址,从而阻止Google对其进行缓存(它将每天更新)。

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