javascript - 为什么我的 Google 表格功能这么慢?

标签 javascript google-apps-script google-sheets

我喜欢函数 IFNA( expression, value_if_NA ) 的形式来检查条件,而无需计算两次。

所以,我想我应该编写我认为缺少的函数,IFZERO( expression, value_if_zero )。我的函数可以工作,但它似乎特别慢,有时会死锁(在一小部分单元格中显示“正在加载...”)。

function IFZERO( expression, valueIfZero )
{
  var result = eval( expression );
  if ( result === 0 )
    return valueIfZero;
  return result;
}

我的用法是在一列具有此类公式的单元格中:

=IFZERO( E70 - SUMIF( A:A, A70, G:G ), "" )

结果: 单元格显示“正在加载...”,执行一个单元格大约需要 500 毫秒。

我的工作表中只有大约 80 行,尽管 A、G 等中的值是从其他工作表的 FILTER() 结果中提取的,但等效的(但不太漂亮)

=IF( E70 - SUMIF( A:A, A70, G:G ) = 0, "", E70 - SUMIF( A:A, A70, G:G ) )

立即返回。

我的问题是:我的 JavaScript 函数是否错过了某种优化?我想知道是否有一种基于事件的方法可以做同样的事情,而不必在 JavaScript 层中使用 eval()

最佳答案

这个答案怎么样?请将此视为多个答案之一。

修改后的脚本:

我认为在您的自定义函数中,=IFZERO( E70 - SUMIF( A:A, A70, G:G ), "") 给出的表达式有已经计算过了。所以你可以修改如下。

function IFZERO(result, valueIfZero) {
  return result === 0 ? valueIfZero : result
}
  • 通过此修改,不需要使用 eval()
  • 您还可以将此修改后的脚本用作 =IFZERO( E70 - SUMIF( A:A, A70, G:G ), "")

关于javascript - 为什么我的 Google 表格功能这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921170/

相关文章:

javascript - 使用 PHP 获取数组计数,在 HTML 中插入计数并使用 Javascript 获取

javascript - 检查嵌套 JSON 结构是否包含 key

javascript - 通过将点替换为斜线来格式化日期的问题

google-sheets - 谷歌表格 : How to Count Matching Values in 2 Columns

google-sheets - 为什么这个 IMPORTRANGE 公式不起作用?

javascript - 在 React/TypeScript/Webpack 中覆盖 JSON 文件

php 数组到基于按钮单击的 javascript

file - 如何最好地删除文件夹及其子文件夹中的所有文件

javascript - 如何使用 Google 协作平台的 Google App 脚本创建动态组件?

javascript - 如何从 Google Sheet App Script 返回#N/A?