我有以下代码清除每张表中的所有过滤器:
function clearAllFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheetIds = ss.getSheets();
for (var i in sheetIds) {
var requests = [{
"clearBasicFilter": {
"sheetId": sheetIds[i].getSheetId()
}
}];
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
}
代码运行良好,但我收到以下错误:
如何摆脱此错误消息或更好地优化代码以尽快完成其工作?...
编辑:要添加更多信息,我的电子表格有119张。
答案 0 :(得分:1)
您可能达到了当前的配额限制。请注意Sheets API的Usage Limits。
此版本的Google表格API每个项目每100秒有500个请求,每个用户每100秒有100个请求。分别跟踪读取和写入的限制。没有每日使用限制。
要查看或更改项目的使用限制,或要求增加配额,请执行以下操作:
- 如果您的项目还没有billing account,请创建一个。
在API控制台中- Visit the Enabled APIs page of the API library,然后从列表中选择一个API。
- 要查看和更改与配额相关的设置,请选择配额。要查看使用情况统计信息,请选择使用情况。
醇>
希望这有帮助!
答案 1 :(得分:1)
@tehhowch评论是我所需要的,他给了我一个线索,我找到了修复代码。
错误在于for循环:
for (var i in sheetIds) {
var requests = [{
"clearBasicFilter": {
"sheetId": sheetIds[i].getSheetId()
}
}];
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
在这里,我循环遍历电子表格中的每个工作表,获取工作表ID,然后调用.batchUpdate()
。这里的问题是,我为每张表调用了工作表API,这意味着我为所有119张工作调用了119次。
上述代码效率低且超出我的配额限制。
<强> FIX:强>
.batchUpdate()
移到for循环之外.batchUpdate({'requests': array}
而不是.batchUpdate({'requests': requests}
所以现在代码效率很高,而不是调用工作表API 119次,现在我只调用一次,修复配额问题并成功运行脚本而没有任何错误消息。
完整代码:
function clearAllFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheetIds = ss.getSheets();
var idArray = [];
//loop through all the sheets, get the sheet ID, then push into the array
for (var i in sheetIds) {
var requests = [{
"clearBasicFilter": {
"sheetId": sheetIds[i].getSheetId()
}
}];
idArray.push(requests); //now the array stores all the sheet IDs
//Logger.log(idArray);
}
Sheets.Spreadsheets.batchUpdate({'requests': idArray}, ssId); //do .batchUpdate only once by passing in the array
}