【问题标题】:Sheets gets stuck Loading... a cell and I have to reload表格卡住了正在加载...一个单元格,我必须重新加载
【发布时间】: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


【解决方案1】:

为了避免重新加载您的电子表格,您很可能必须关注the guidelines for custom function optimization:

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

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

同时减少电子表格中数据范围的大小以及数据范围底部和右侧的空白行和列的数量将有助于提高电子表格的性能。

相关

【讨论】:

  • 我的公式无法以这种方式进一步优化,正如我所提到的,执行时间最长为 0.125 秒,所以这不是问题。我已经从一次调用中返回了两个值。因为工作表的每一行都取决于前一行,所以我不能返回一个垂直的结果数组,只能返回我已经做过的水平。最后,问题不是性能。电子表格只是停止更新,加载中......永远。
  • 由于您的公式取决于其他公式,因此您必须将写入和读取每个公式的值所需的时间添加到 0.125 秒......并且还要考虑这些计算是链接的...... . 0.125 + w/r 读取第 1 行 + 0.125 + w/r 第 2 行...
  • 根据上一行,您的函数可以将每一行的值存储在一个变量中,然后在所有计算完成后一次传递所有值。
  • 我的自定义公式不直接进行任何读取或写入,如果这很重要的话。所有数据都通过参数传入。它不使用“电子表格”。但就像我一直说的问题不是性能。问题是它挂起,我必须重新加载。
  • 读取参数以便在函数中使用即使没有使用 SpreadsheetApp 以及写入结果以便在电子表格中显示/存储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多