You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

恢复谷歌表格旧版本后脚本运行极慢且异常报错求助

表格回滚后脚本运行极慢且报错的解决求助

问题详情

此前表格出现问题,我回滚到了旧版本,但恢复后出现以下异常:

  • 脚本运行速度极慢,频繁因超时终止
  • 出现从未见过的错误,疑似脚本无法正常定位表格
  • 即便简单脚本,启动后第一行执行耗时长达2分钟

错误截图:
异常错误

脚本耗时截图:
简单脚本启动耗时2分钟

涉及脚本

function atualizarDisparos() {
Logger.log("step1")
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DB'); 
Logger.log("step2")
  
 
  var startRow = 27; // 记得去掉表头
  var quantidadeDeViveiros = 16;
  var lastRow = startRow + quantidadeDeViveiros; // 计算最后一行

  Logger.log("step4")

  var startColumn = 2; // 记得去掉边框列
  var lastColumn = ss.getLastColumn(); // 获取最后一列
  var numColumns = lastColumn-startColumn+1; // 计算列数

  var dataRange = ss.getRange(startRow, startColumn, quantidadeDeViveiros, numColumns)
  var data = dataRange.getValues();

  var povoamento ="";
  var bioensaio ="";
  var despesca ="";
  var povoadoHoje ="";
  var atualizar = 0;

  var biomassaDespesca = 2000;
  var tamanhoDespesca = 18;
  var tempoBioensaio = 3;
  var diasParaVenda = 15;

Logger.log("step4")

  for (var linhaAtual = 0; linhaAtual <= quantidadeDeViveiros-1; linhaAtual++) {
    var row = data[linhaAtual];
    Logger.log("step5")
    if (row[7] == 0 || row[35] < diasParaVenda) { //==== 放养
      var povoamento = povoamento + "V" + row[0] + " (" + row[12] + "kg de " + row[14] + "g) || "
      var atualizar = 1;
    } 

    if (row[7] != 0 && row[9] == "" && row[11] <= 3) { //=== 生物试验
      var dataPovoamento = new Date(row[5]);
      var dataBioensaio = dataPovoamento.setDate(dataPovoamento.getDate()+tempoBioensaio-1);
      var dataBioensaio = new Date(dataBioensaio);
      var dataHoje = new Date();
      Logger.log(dataBioensaio)
      Logger.log(dataHoje)      

      if (dataHoje >= dataBioensaio) {
        var dataBioensaio = Utilities.formatDate(dataBioensaio, Session.getScriptTimeZone(), 'dd/MM/yy');
        var bioensaio = bioensaio + "V" + row[0] + " (取出生物试验样本: " + dataBioensaio + ") || "
      }
      var atualizar = 1;
    } 

      if (row[7] != 0 && row[8] == 0) { //=== 今日放养
      var dataPovoamento = new Date(row[5]);
      var dataPovoamento = new Date(dataPovoamento);
      var dataPovoamento = Utilities.formatDate(dataPovoamento, Session.getScriptTimeZone(), 'dd/MM/yy');
      var povoadoHoje = povoadoHoje + "V" + row[0] + " (放养日期: " + dataPovoamento + ") || "

      var atualizar = 1;
    } 

    if (row[14] >= 8 && row[35] < diasParaVenda) { //=== 捕捞
      var despesca = despesca + "V" + row[0] + " (" + row[12] + "kg de " + row[14] + "g) || "
      var atualizar = 1
    }
  }

  if(atualizar == 1) {
    var ssPC = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PC'); 
    ssPC.getRange('k107').setValue(povoamento);
    ssPC.getRange('k108').setValue(bioensaio);
    ssPC.getRange('k109').setValue(despesca);
    ssPC.getRange('k123').setValue(povoadoHoje);
  }
}

解决建议

1. 排查表格本身问题

  • 回滚后的表格可能存在隐藏损坏或冗余数据,新建空白表格,复制原表格内容(不含脚本)到新表格,重新绑定脚本测试。
  • 检查表格内是否有大量公式、条件格式或数据验证规则,暂时禁用后测试速度变化。

2. 优化脚本减少服务调用

Google Apps Script中,表格交互(如getRange、setValue)是核心耗时点,需尽量减少调用次数:

  • 将多次setValue改为批量写入:
// 替换原有的四次setValue调用
if(atualizar == 1) {
  var ssPC = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PC'); 
  // 批量写入连续单元格
  ssPC.getRange('K107:K109').setValues([[povoamento], [bioensaio], [despesca]]);
  // 单独写入不连续的K123
  ssPC.getRange('K123').setValue(povoadoHoje);
}
  • 移除循环内的Logger.log,大量日志输出会拖慢执行速度,仅保留关键节点日志用于调试。

3. 检查脚本绑定与权限

回滚后脚本绑定关系可能异常,尝试重新授权脚本,或复制脚本到新的脚本项目后重新绑定表格。

4. 单独测试表格访问耗时

运行以下脚本测试表格定位的耗时,确认是否是表格访问本身的问题:

function testSheetAccess() {
  const start = new Date();
  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DB');
  const end = new Date();
  Logger.log(`获取表格耗时:${end - start}毫秒`);
}

如果这一步耗时超过10秒,说明表格存在访问异常,可尝试切换网络环境,或联系Google官方支持排查。


内容的提问来源于stack exchange,提问作者Emanuel Maia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:36:16