这个问题很晚了。我最近不得不做类似的事情。我想我会在这里写一些东西让其他人发现有用..希望。
我的用例:
我希望我的 google 表格每隔几分钟在特定 url 上调用 IMPORTDATA,因为针对该 url 存储的数据正在被一个 Timer Trigger 和一个 Http Trigger Azure Function 更改。
基本上,我希望我的 google 表格每 5 分钟刷新一次,因为我知道针对 url 的数据会不断变化。
我尝试了什么:
我开始使用与@greg 所暗示的类似的脚本。 (为此欢呼。)
我将该脚本的计时器触发器设置为 5 分钟。所有人看起来都很笨拙。
问题:
我意识到将函数设置为单元格上的值会导致函数仅在工作表为空时开始运行。第二次触发触发时,工作表没有刷新。
所以我尝试了
cell.setValue("");
cell.setValue('=IMPORTDATA("my-url")');
运气不好。
工作表没有用新数据刷新。似乎工作表看到单元格中要设置的值与现有值相同,因此它没有费心重新运行该函数。
为了证实我的假设,
我手动尝试了:
- 从谷歌表格单元格中删除 IMPORTDATA 函数。
- 将值粘贴回单元格中。
工作表没有刷新。
但是当我手动尝试时:
- 从/在单元格中删除/更改 URL。按 Enter。
- 在单元格中再次粘贴公式。按 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 函数,因为这种方法对我来说不太奏效。
您可以做类似的事情,假设您想要获取某种表格或图表内容并将值保存到您的工作表中。