Google电子表格脚本未更新动态信息

时间:2013-04-24 18:22:58

标签: google-apps-script google-sheets

所以,我为Minecraft和'Feed The Beast'制作了一个电子表格,这是游戏的改装包。我的电子表格列出了为最新版本的Minecraft更新的所有mod。最近我制作了一个脚本来解析mod版本号的页面。它们每小时每天更换一次,而不是手动操作。

function GetVersion(url, slice, num1, num2) {
  var r = UrlFetchApp.fetch(url).getContentText();
  var version = r.slice(r.indexOf(slice)).slice(num1, num2);

  return version;
}

在其中一个单元格中,Ill具有以下内容

 =GetVersion("http://files.minecraftforge.net", "Build 7.", 12, 15)

现在这个工作正常,让我得到我正在寻找的版本号。问题是,当更新发生并且出现新版本时,即使我关闭窗口并重新打开电子表格或重新加载或其他任何内容,解析器也不会反映这一点!如果我稍微改变上面的内容,比如将15更改为16,它会刷新,但之后会再次卡在那里直到我再次手动更改它。

如何在重新装入工作表时至少刷新它?

编辑:好吧,首先我尝试进入资源和触发器,并在每次打开文档时触发非常小的触发器。这没有用..............

然后我试着变得聪明。每当我改变它时,注意到公式会重新评估,我推测公式本身或单元格参数需要改变以便发生这种情况。所以我在公式中传递一个虚拟参数,并更改该参数以更新单元格。

但这很烦人,让我不得不编辑(或按下按钮)只是为了让狗屎刷新。

所以我得到了脑电波,我现在正在虚拟参数中传递GoogleClock()。所有单元格现在每60秒更新一次。耶

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

如果你想使用自定义cel公式,使用googleclock作为参数是最好的。 而是从菜单项和/或onOpen / time触发器调用更新函数。

答案 1 :(得分:2)

除了将GoogleClock()作为参数传递的解决方法(我同意这是您最好使用自定义函数),另一个选项是取消自定义函数,并使用GAS将结果直接写入单元格,例如:

SpreadsheetApp.getActiveSpreadsheet().getRange('Sheet1!A1').setValue(version);

然后在参考资源,当前项目的触发器中,您可以设置“编辑时”和时间驱动的触发器(要明确:这些触发器不适用于从电子表格单元调用的自定义函数;所有“工作” “必须由剧本本身完成。”