【问题标题】:Google script - Exceeded maximum execution time , help optimize谷歌脚本 - 超过最大执行时间,帮助优化
【发布时间】:2016-09-20 06:14:22
【问题描述】:

谷歌脚本电子表格 新手

我尝试创建一个矩阵,如果数组是一个小型数据库,一切正常,当然如果它超过 800 行并且更多取决于错误“您已超过允许的最大运行时间”。没有有效地创建矩阵:

var s = SpreadsheetApp.getActiveSheet(); //List
var toAddArray = []; //Greate Arr
  for (i = 1; i <= s.getLastRow()+1; ++i){ //Start getting Value
  var numbr = s.getRange(i,4); //detect range
   var Valus = numbr.getValues().toString(); //get value
    
    //filter value
  var newznach = Valus.replace(/\-/g, "").replace(/[0-9][0-9][0-9][0-9][0-9][a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]/g, "").replace(/[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]/g, "");
  toAddArray.push([i.toFixed(0),Valus,newznach]); //add to array 0- Row numb, 1- Value, 2- "filtered" value
  }

toAddArray =

{
Row, Value, NewValue - filtered
Row, Value, NewValue - filtered
Row, Value, NewValue - filtered
...
}

我能否以其他方式获得相同的数组(更快、更容易)?

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

您在每一行都调用 getValues,这会消耗很多性能。
最好进行一次大调用以获取所有数据,然后按顺序进行处理。

var s = SpreadsheetApp.getActiveSheet();
var data = s.getRange(1,4, s.getLastRow()).getValues();

var toAddArray = data.map(function(row, i) {
  var Valus = row[0].toString();
  var newznach = Valus.
    replace(/\-/g, "").
    replace(/[0-9][0-9][0-9][0-9][0-9][a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]/g, "").
    replace(/[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]/g, "");

  return [i.toFixed(0), Valus, newznach];
});

【讨论】:

  • 也谢谢你,意识到问题在于 GetValue 是在每个循环中执行的。我的拐杖是为了完成这个周期,比如: var Valus = numbr.getValues().toString().split(","); toAddArray.push([i.toFixed(0),Valus[i-1],newznach]);但你不用怀疑,代码更正确更漂亮
  • 使用您的代码,1500 行表格的运行时间为 0.254 秒
【解决方案2】:

这段代码:

var Valus = numbr.getValues().toString();

会减慢您的速度,因为您会循环读取工作表中的数据。

尝试一次将数据读入数组,然后使用它:

var data = s.getDataRange().getValues();

然后循环使用data。此示例代码记录活动工作表中的每个单元格:

function logEachCell() {
  var s = SpreadsheetApp.getActiveSheet();
  var data = s.getDataRange().getValues();

  // loop each cell
  var row = [];
  for (var i = 0; i < data.length; i++) {
    row = data[i];
    for (var j = 0; j < row.length; j++) {
      Logger.log(row[j])      
    } 
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多