谷歌脚本 - 超过最大执行时间,有助于优化 [英] Google script - Exceeded maximum execution time , help optimize

查看:85
本文介绍了谷歌脚本 - 超过最大执行时间,有助于优化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

google脚本电子表格
新手

我尝试创建一个矩阵,如果数组是小型数据库,一切正常,当然如果超过800行和更多的依赖于错误您已经超过了允许的最大运行时间。没有有效地创建矩阵:数据控制台=真数据

  var s = SpreadsheetApp.getActiveSheet(); // Listvar toAddArray = []; //创建Arr for(i = 1; i< = s.getLastRow()+ 1; ++ i){//开始获取Value var numbr = s.getRange(i,4); //检测范围var Valus = numbr.getValues()。toString(); //获取值//过滤值var newznach = Valus.replace(/ \- / g,).replace(/ [0-9] [0-9] [0-9] [0-9] [ 0-9] [a-zA-Z-a-a-a-a] [a-zA-Z-a-z-a-a] / g,)。 zA-ZA-A -A -Z] -g,); toAddArray.push([i.toFixed(0),衣被合计,newznach]); //添加到数组0-行numb,1-值,2-过滤值}  



toAddArray =

  {
行,值,NewValue - 已过滤
行,值,NewValue - 已过滤
行,值,新值 - 已过滤
...
}

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

解决方案

您正在调用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。
替换(/ \- / g,)。
替换(/ [0-9] [0-9] [0-9] [0-9] [0-9] [a-zA ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA-ZA- яА-Я] / g,);

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


google script spreadsheet Novice

I try to create a matrix , if the array is a small database everything works fine, of course if it exceeds 800 lines and more rests on the error "You have exceeded the maximum allowed run time ." Not effectively create a matrix :

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

Can I somehow get an array of the same the other way ( faster, easier ) ?

解决方案

You're doing a call to getValues every row, that eats a lot of performance.
It is better to do one big call to have all the data and then go through it sequentially.

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

这篇关于谷歌脚本 - 超过最大执行时间,有助于优化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆