【发布时间】:2019-09-06 13:52:49
【问题描述】:
我有一个相当大的学校设置来记录会议时间和链接到单独工作表的学生信息。
- 10 校长用于输入信息的学校电子表格,包括指向每个学生个人日历的超链接,并查看从日历返回的出勤统计数据。
- 43 个导师电子表格,可根据导师姓名从学校电子表格中提取学生数据。
- ~109 个学生日历电子表格,包含 9 个标签,为期 9 个月。用于输入导师出勤信息。
使所有内容都链接的大部分内容是一个自定义函数,它从超链接函数中提取 URL。我找到了代码here 和here。该函数在学校电子表格中用作每个学生的唯一标识符。
我曾尝试在 Utilities.sleep 中添加各种数量(包括 3000),但错误最终会返回(再次偶尔出现)。看来这可能是基于每日配额限制服务的问题,但我没有看到专门解决 exec qps。
/**
* Returns the URL of a hyperlinked cell, if it's entered with hyperlink command.
* Supports ranges
* @param {A1} reference Cell reference
* @customfunction
*/
function linkURL(reference) {
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
var formulas = range.getFormulas();
var output = [];
for (var i = 0; i < formulas.length; i++) {
var row = [];
for (var j = 0; j < formulas[0].length; j++) {
var url = formulas[i][j].match(/=hyperlink\("([^"]+)"/i);
row.push(url ? url[1] : '');
}
output.push(row);
Utilities.sleep(2000);
}
return output
}
我遇到的一个错误是“TypeError:无法从 null 读取属性“1”。 (第 16 行,文件“代码”)',这似乎不一定会影响函数执行。我很想知道为什么会发生这个错误。
但是,我确实通过不同的学校电子表格偶尔收到错误,上面写着“服务在短时间内调用了太多次:exec qps。在调用之间尝试 Utilities.sleep(1000)。(第 0 行)。”这会在整个电子表格中显示 #Error 并导致信息不显示。
这似乎是服务受到每日配额限制的问题,但我没有看到专门解决 exec qps。在这么大的项目中是否有解决此问题的方法?学校系统是否可以升级到可以使错误消失的东西?
【问题讨论】:
-
在循环中我只看到
.match和.push被调用,这是正常的 javascript 函数,我不相信它们有速率限制。 -
第 16 行是哪一行?
-
@barbsan 在上面的脚本中是
throw new Error(args[1] + ' is not a valid range'); -
移除
Utilities.sleep并批量调用函数:=linkURL(A1:A10)
标签: javascript google-apps-script google-sheets custom-function