gpt4 book ai didi

google-apps-script - 服务调用次数过多(Google Apps 脚本)

转载 作者:行者123 更新时间:2023-12-03 04:22:26 26 4
gpt4 key购买 nike

我想使用 Google Apps 脚本为电子表格创建自定义函数。我做了一个非常简单的函数:

function foo(){
return "bar";
};

问题是我需要在几百个单元格中使用此功能。当我将函数 =foo() 粘贴到所有这些单元格中时,该函数在一些单元格中起作用,但在大多数单元格中我收到此错误:“服务调用次数过多:电子表格。在调用之间尝试 Utilities.sleep(1000)。”

[Screenshot here]

我想我不明白为什么这个函数(尽管很简单)被认为是对电子表格服务的调用。我什至不请求任何数据(函数本身除外)。这是问题所在吗?如果是这样,有解决方法吗?自定义函数可以使 Google 电子表格变得更加强大,但这个问题限制了在多个单元格中使用自定义函数的可能性。有建议吗?

(P.S. - 当所有单元格同时调用其函数时,按照错误消息的建议使用 Utilities.sleep() 函数根本没有帮助;它只会减慢速度哪些单个单元重复调用该函数。)

最佳答案

根据Optimization section关于Apps脚本功能指南:

Each time a custom function is used in a spreadsheet, Google Sheets makes a separate call to the Apps Script server. If your spreadsheet contains dozens (or hundreds, or thousands!) of custom function calls, this process can be quite slow.

Consequently, if you plan to use a custom function multiple times on a large range of data, consider modifying the function so that it accepts a range as input in the form of a two-dimensional array, then returns a two-dimensional array that can overflow into the appropriate cells.

为此,请传入一个表示您要返回的数组大小的输入。当您开始执行函数时,检查输入参数是否是带有 input.map 的数组。如果是,您可以对每个项目调用该函数并返回整个集合。

所以在你的情况下是这样的:

function foo(){
return "bar";
};

您可以像这样更新函数:

function foo(input){
if (input.map) { // Test whether input is an array.
return input.map(foo); // Recurse over array if so.
} else {
// do actual function work here
return "bar";
}
};

然后这样调用它:

screenshot

关于google-apps-script - 服务调用次数过多(Google Apps 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com