我有一张使用ImportHTML导入数据的工作表。数据变化频繁,有没有办法让Google表格自动刷新数据?
我尝试在公式中添加& year(now()) & month(now()) & day(now()) & hour(now()) & minute(now()),
,但收到以下错误:
此函数不允许使用NOW(),RAND()或RANDBETWEEN()
引用单元格
答案 0 :(得分:1)
很晚才提出这个问题。我最近不得不做类似的事情。我以为我会在这里写一些东西,以供其他人找到。.希望如此。
我的用例:
我希望我的Google工作表每隔几分钟就在特定的URL上调用IMPORTDATA
,因为针对该URL存储的数据已由 Timer Trigger和Http Trigger Azure Azure Function进行了更改。
基本上,我希望我的Google工作表每5分钟刷新一次,因为我知道url的数据一直在变化。
我尝试过的事情:
我从与@greg提到的脚本相似的脚本开始。 (为此加油。)
我为该脚本设置了一个5分钟的计时器触发器。所有人看上去矮胖。
问题:
我意识到将函数设置为单元格上的值会导致该函数仅在工作表为空时才开始运行。第二次触发触发器时,工作表没有刷新。
所以我尝试了
cell.setValue("");
cell.setValue('=IMPORTDATA("my-url")');
没有运气。
工作表未使用新数据刷新。似乎工作表看到该单元格中要设置的值与现有值相同,因此不必费心重新运行该函数。
要确认我的假设,
我手动尝试过:
- 从Google表格单元格中剪切IMPORTDATA函数。
- 将值粘贴回单元格中。
工作表没有刷新。
但是,当我手动尝试时:
- 从/在单元格中删除/更改URL。点击Enter。
- 再次将公式粘贴到单元格中。点击Enter。
这有效。因此,似乎cell.SetValue()
甚至cell.setFormula()
都没有重新运行我设置的功能,因为相同的功能存在于开始的单元格中。
我的解决方案最适合我的用例:
由于我所指向的网址数据已经是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
函数,因为这种方法对我而言不太可行。
如果您想获取某种表或图表内容并将其值保存到工作表中,则可以做类似的事情。