Google脚本 - 超过最长执行时间,有助于优化

时间:2016-09-20 06:14:22

标签: google-apps-script google-sheets

谷歌脚本电子表格 新手

我尝试创建一个矩阵,如果数组是一个小型数据库,一切正常,当然如果它超过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
...
}

我可以以某种方式获得相同的数组(更快,更容易)吗?

2 个答案:

答案 0 :(得分:2)

你正在每行调用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];
});

答案 1 :(得分:1)

此代码:

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])      
    } 
  }
}