【发布时间】:2021-05-06 21:43:55
【问题描述】:
tl;dr:我的自定义公式单元格都在加载...并且它们开始填写结果,但它们卡住了。重新加载会立即提供完整的结果。我不想每次更改值时都重新加载。
在我的工作表中,几乎所有单元格都是相互连接的,因此更改一个单元格会触发重新计算。每一行是一年,每一列是所有行的相同公式。每个单元格可以引用其行中较早的列或前一行中的任何内容,以及一些包含“输入”的绝对位置。更改输入会触发所有内容的重新计算。
带有我的自定义函数的列将加载...,然后一次一个单元格返回值,每个单元格几乎一秒钟。好的,慢,但很好。但通常它只是在中途完全停止。有时它会重新启动,但通常不会。
但是所有单元格都重新计算了。我的自定义函数被调用并迅速返回值,执行时间通常为 0.125 秒或更短。如果我在浏览器中重新加载,我会立即得到完全重新计算的表格。我的浏览器中的表格和 Google 的服务器之间的某些链接似乎被切断了,所以我看不到更新了。
这是我第一次使用 Apps 脚本(或 JavaScript),但几十年来我一直在以其他方式进行编程。如果重要的话,自定义函数是纯数学的,除了 Math 不调用任何服务,甚至不调用电子表格,在其参数中获取所需的一切,在同一个文件中使用几个函数。这是一个详细的税收计算器。
我使用的是最近的 Chromebook。
【问题讨论】:
-
欢迎来到Stack Overflow。您的自定义函数在电子表格中使用了多少次?电子表格公式是否依赖于其他公式的计算?您的电子表格的数据范围有多少个单元格?
-
有~40行,~35列,自定义函数在一列中。它的参数完全取决于先前的列/行,因此输入中的任何更改都将连续触发 40 次函数调用。我不确定您评论中的最后一个问题是什么意思。
-
您能否提供一份您正在处理的电子表格的副本,不含敏感信息?
-
@Iamblichus link 尝试修改 AS8 的值。这将触发逐行重新计算。 AD/AE 列是具有我的自定义应用程序脚本功能的列。随着行的重新计算,AD 列中的一行将显示“正在加载...”。大多数情况下,此过程将挂起,使一个单元格永久“加载...”。 Executions 显示我的函数已执行,所有结果都在 15 秒内返回。如果您重新加载,则整个工作表将完成,“正在加载...”将消失。
-
您是否尝试过通过onEdit 触发器而不是通过自定义函数来触发?无论如何,我认为 Rubén 给出的建议(修改您的自定义函数以接受多行参数并返回多行)肯定可以改善您的情况。
标签: google-apps-script google-sheets custom-function