【发布时间】:2019-02-11 03:20:28
【问题描述】:
设置: 我有一个 Google 表,我想在其中运行使用脚本实现的自定义函数。此脚本用于执行相对冗长的 URL 查找和解码过程(每次调用 10 毫秒,取决于带宽和 ping)。自定义函数使用一列作为输入,并返回结果。
问题: 打开我的 Google 工作表时,使用此计算的列会刷新。这会使 Google 工作表停止大约 10 秒,直到重新计算列中的每个单元格。当我添加到电子表格中时,这只会变得更糟。
问题: 我可以更改我的函数脚本,或更改 Google 表格中的设置,以便仅在更改输入单元格时计算慢速自定义函数吗?
对于任何好奇的人,here is a demo sheet with my problem
【问题讨论】:
-
您可以使用onEdit(),然后检查编辑的内容是否是您要等待的单元格/范围,然后才运行您的脚本。
-
除了 ChrisW 所说的,按需调用函数,如从自定义菜单/按钮调用。
-
我试用了您的电子表格和副本。一些想法:1)它几乎是一个循环引用,因为函数参数“x”也是睡眠命令的乘数。当在睡眠期间声明一个单独的变量或将 sleep 编辑为静态值时,过度延迟就会消失 - 例如,
Utilities.sleep(100);。如果我可能会问,您在自定义函数中的 sleep 命令中看到了什么好处。停止/中断脚本一段时间是一回事,但为什么要中断自定义函数呢? -
sleep 命令代表我的实际功能:调用 google API 来取消缩短 goo.gl 链接,然后对返回的 GPS 坐标 URL 进行正则表达式解析,然后进行格式化。另外,我正在旅行,没有时间尝试上面留下的回复,但我很快就会。
-
好的,我终于回家了,有机会查看您的回复。 OnEdit 似乎很有希望,因为它可以配置为仅在编辑感兴趣的列中的单元格时运行,但是我意识到这是谷歌表格的默认行为。我遇到的延迟是在浏览器刷新时重新计算所有单元格,而不是在更改一个单元格时重新计算。更改一个单元格需要几微秒(不是问题),但重新计算整个列需要更长的时间。我想我将不得不忍受缓慢的开放时间。谢谢..
标签: performance google-apps-script google-sheets