Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 工作表在加载时卡住。。。一个牢房,我得重新装填_Google Apps Script_Google Sheets_Custom Function - Fatal编程技术网

Google apps script 工作表在加载时卡住。。。一个牢房,我得重新装填

Google apps script 工作表在加载时卡住。。。一个牢房,我得重新装填,google-apps-script,google-sheets,custom-function,Google Apps Script,Google Sheets,Custom Function,tl;dr:我的自定义公式单元格全部加载。。。他们开始填写结果,但他们被卡住了。重新加载会立即提供已完成的结果。我不希望每次更改值时都重新加载 在我的工作表中,几乎所有的单元都是相互连接的,所以改变一个单元会触发一个recalc。每行为一年,每列为所有行的相同公式。每个单元格都可以引用其行中较早的列或前一行中的任何内容,加上几个包含“输入”的绝对位置。更改输入会触发对所有内容的重新调用 带有我的自定义函数的列将加载…,然后一次加载一个单元格,返回值,几乎每个单元格一秒钟。好的,慢一点,但是很好。

tl;dr:我的自定义公式单元格全部加载。。。他们开始填写结果,但他们被卡住了。重新加载会立即提供已完成的结果。我不希望每次更改值时都重新加载

在我的工作表中,几乎所有的单元都是相互连接的,所以改变一个单元会触发一个recalc。每行为一年,每列为所有行的相同公式。每个单元格都可以引用其行中较早的列或前一行中的任何内容,加上几个包含“输入”的绝对位置。更改输入会触发对所有内容的重新调用

带有我的自定义函数的列将加载…,然后一次加载一个单元格,返回值,几乎每个单元格一秒钟。好的,慢一点,但是很好。但通常它只是在中途完全停止。有时它会再次启动,但通常不会

但是这些细胞都被重新计算过。我的自定义函数被迅速调用并返回值,执行时间通常为0.125秒或更短。如果在浏览器中重新加载,我会立即获得完全重新计算的图纸。看起来我的浏览器和谷歌服务器上的工作表之间的链接被切断了,所以我不再看到更新

这是我第一次使用应用程序脚本——或者JavaScript——但几十年来我一直在用其他方式编程。如果重要的话,自定义函数是纯粹的数学函数,除了数学之外不调用任何服务,甚至不调用电子表格,在其参数中获得所需的一切,在同一个文件中使用几个函数。这是一个详细的税务计算器


我正在使用最新的Chromebook。

为了避免重新加载电子表格,您很可能必须遵循以下步骤:

小结:不要使用一个公式计算单个值,而是使用公式计算多个值并将它们作为数组返回

以上内容将减少公式的数量并提高电子表格的性能,但请记住,自定义函数的最大执行时间为30秒

此外,减小电子表格中数据区域的大小以及数据区域底部和右侧的空白行和空白列的数量将有助于提高电子表格的性能

相关的


欢迎光临。您的自定义函数在电子表格中使用了多少次?电子表格公式是否依赖于其他公式的计算?有多少单元格具有电子表格的数据范围?大约有40行,35列,自定义函数位于一列中。它的参数完全依赖于前面的列/行,因此输入中的任何更改都将连续触发40次函数调用。我不知道你评论中的最后一个问题是什么意思。你能提供一份你正在处理的电子表格的副本,没有敏感信息吗?@Iamblichus尝试修改AS8的值。这将触发逐行的recalc。列AD/AE是具有“我的自定义应用程序脚本”功能的列。当行重新计算时,列AD中的一行将显示“正在加载…”。大多数情况下,此进程将挂起,留下一个单元格永久“加载…”。执行显示我的函数已执行,所有结果在15秒内返回。如果重新加载,整个工作表将完成,“加载…”将消失。您是否尝试过通过触发器而不是通过自定义函数触发此操作?在任何情况下,我认为Ruben给出的建议(修改自定义函数以接受多行参数并返回多行)肯定可以改善您的情况。我的公式无法以这种方式进一步优化,正如我提到的,执行时间最多为0.125秒,所以这不是问题所在。我已经从一次调用返回了两个值。因为工作表的每一行都依赖于前一行,所以我不能返回结果的垂直数组,只能返回水平数组,我已经这样做了。最后,问题不在于性能。电子表格只是停止更新、加载。。。永远。由于您的公式依赖于其他公式,您必须将写入和读取每个公式值所需的时间添加到0.125秒。。。并考虑这些计算是链式的…0.125+w/r读取第1行+0.125+w/r读取第2行…根据前一行的不同,您的函数可以将每行上的值存储在一个变量中,然后在所有计算完成后立即传递所有值。我的自定义公式不会直接进行任何读取或写入,如果这很重要的话。所有数据都是通过参数传入的。它不使用“电子表格”。但正如我一直说的,问题不在于性能。问题是它挂起,我必须重新加载。读取参数以便在函数中使用,即使没有使用SpreadsheetApp,也会写入结果以便在电子表格中显示/存储。