我正在使用 Google 电子表格进行税务管理。我一年内完成的所有财务交易都在电子表格中。由于我所在国家/地区的税收规则非常复杂,因此我开发了许多 JavaScript 函数来帮助我进行计算。我的电子表格中有很多行,大约 1000 行。每一行都有对这些 JavaScript 函数的多个引用。
该系统以前运行良好,但今天我发现 Google 在 Google 电子表格中安装了某种运行时限制系统,导致我的许多列中止并出现以下错误:
Service invoked too many times in a short time: exec maxSimultaneous.
Try Utilities.sleep(1000) between calls.
经过一番调查,似乎这个时间限制是为了防止脚本运行时间过长。我的情况不同:我的脚本都很短,O(1) 算法除了计算一些数字什么都不做。一个典型的脚本如下所示:
// Calculates the total amount excluding Value Added Tax, given
// an amount including Value Added Tax, and other sorts of information.
function ex_btw(inc_btw, commentaar, soort, btw_verlegd, btw_pct) {
Utilities.sleep(1000);
var soort = soort.toLowerCase();
if (soort == 'eten en drinken'
|| commentaar.match(/treinkaartje/i)
|| commentaar.match(/treinticket/i)
|| commentaar.match(/taxi/i)
|| commentaar.match(/ boek /i))
{
return inc_btw / 1.06;
} else if (soort == 'priveonttrekking'
|| soort == 'boete'
|| soort == 'belasting'
|| commentaar.match(/postzegel/i)
|| btw_verlegd == 'Ja')
{
return inc_btw;
} else {
return inc_btw / (1 + btw_pct);
}
}
然后从单元格中调用该脚本,如下所示:
=IF(B6<>""; ex_btw(B6;D6;E6;J6;S6); "")
也许我的问题是我有太多的脚本调用。每一行调用大约 6 个这样的脚本,因此对于 1000 行,每个电子表格我调用 6000 次。
我该如何解决这个问题?有没有办法增加执行限制,或者有没有办法让脚本运行得更慢,这样它们就不会达到执行限制?正如您在示例代码中看到的那样,我已经尝试过 inserting Utilities.sleep(1000)
,但这似乎并不能解决问题。我不在乎脚本是否运行缓慢,我只在乎它们完成时没有错误。
我可以付款以提高限额吗?几天后我需要交税。
我考虑过的其他替代方案,但这是不可行的。
- 使用非 JavaScript 函数。不可行,因为:他们不支持像 Google 电子表格那样的协作。我经常和同事一起检查电子表格,检查我们是否犯了任何错误。这有助于我们双方立即看到对方所做的任何更改。
拥有一个可遍历行并填充单元格的庞大 JavaScript 函数。不可行,因为:
- 太容易出错了,和我现在的方法相比很容易出错。
- 在我重新运行脚本之前不会自动更新单元格。我想在更新其他单元格后立即查看任何计算,就像电子表格应该做的那样。
- 使用 Excel 和 OpenOffice Calc 等其他电子表格。不可行,因为:它们似乎没有提供相同的脚本功能。
- 编写我自己的融资应用程序。不可行,因为:需要太多,这不是我的核心业务,而且税收规则几乎每年都在变化,所以我必须不断更新应用程序。我可以非常快速地更新电子表格,但编写融资应用程序需要太多时间。