【问题标题】:Google Spreadsheet Script problem - Error: Service Times Out: Apps ScriptGoogle 电子表格脚本问题 - 错误:服务超时:Apps 脚本
【发布时间】:2011-06-10 04:49:58
【问题描述】:

我一直在尝试编写一个快速的谷歌脚本来计算婚礼邀请响应电子表格的 rsvps。当新条目被添加到电子表格中时,该脚本在一周内完美运行,然后突然停止工作,每个单元格中出现以下错误消息:

错误:服务超时:Apps 脚本

脚本本身很简单。它查询相关列(有多个事件),然后检查是否有用户指定的一些响应——通常是“是”、“否”或空白。

这个错误是什么意思,有没有人有任何修复建议?

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;
}

【问题讨论】:

  • 能否提供调用该函数的代码?有时会出现一些超时错误,有时最好的办法是等待几分钟再试一次。

标签: google-apps google-apps-script


【解决方案1】:

希望婚礼顺利。前段时间有人问过这个问题,但在这篇文章中被浏览了 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多