我一直试图制作一个快速的谷歌脚本来计算婚礼邀请响应电子表格的rsvps。当新条目添加到电子表格时,该脚本完美地工作了一周,然后突然停止使用每个单元格中的以下错误消息:
错误:服务超时:应用脚本
脚本本身很简单。它查询相关列(有多个事件),然后检查用户是否有某些响应 - “YES”,“NO”或空白,通常。
这个错误是什么意思,有没有人有任何修复建议?
function sumRSVP(response, rsvpType) {
var rsvpCol = 7;
if (rsvpType == "rehearsal") rsvpCol = 8;
if (rsvpType == "brunch") rsvpCol = 9;
var mySum = 0;
var sh = SpreadsheetApp.getActiveSheet();
for( i=2; i<177; i++){
var rsvp = sh.getRange(i, rsvpCol).getValue();
var nguests = sh.getRange(i, 6).getValue();
if(nguests != "" && rsvp == response){
mySum = mySum + parseFloat(nguests);
}
}
return mySum;
}
答案 0 :(得分:4)
希望婚礼进展顺利。这是在前一段时间被问过的,但在这篇文章中被观看了300多次,我认为很重要:
数据不应从循环中的电子表格中提取。所需的数据应该批量提取到数组中,并在循环中评估数组。
请参阅文档参考: https://developers.google.com/apps-script/guide_common_tasks#OptimizeScripts
通过最大限度地减少读写次数,您可以编写脚本以最大限度地利用内置缓存。交替读写命令很慢。要加速脚本,请使用一个命令将所有数据读入数组,对数组中的数据执行任何操作,然后使用一个命令写出数据。
function sumRSVP(response, rsvpType) {
var rsvpCol = 7;
if (rsvpType == "rehearsal") rsvpCol = 8;
if (rsvpType == "brunch") rsvpCol = 9;
var mySum = 0;
var sh = SpreadsheetApp.getActiveSheet();
// start at row 2 - uses columns 6-9
var data = sh.getRange(2, 6, 177 - 1 , 4).getValues();
for(var i=0; i<data.length; i++){
var rsvp = data[i][rsvpCol - 6];
var nguests = data[i][0];
if(nguests != "" && rsvp == response){
mySum = mySum + parseFloat(nguests);
}
}
return mySum;
}