2

所以,我为 Minecraft 制作了一个电子表格,并为游戏制作了一个“Feed The Beast”的模组包。我的电子表格列出了为最新版本的 Minecraft 更新的所有模组。最近我制作了一个脚本来解析页面以获取 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;
}

在其中一个单元格中,我将有以下内容

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

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

我如何获得它,以便在我重新加载工作表时至少刷新它?

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

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

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

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

有一个更好的方法吗?

4

2 回答 2

3

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

于 2013-04-24T20:26:08.160 回答
2

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

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

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

于 2013-04-24T20:53:18.057 回答