谷歌脚本电子表格 新手
我尝试创建一个矩阵,如果数组是一个小型数据库,一切正常,当然如果它超过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
...
}
我可以以某种方式获得相同的数组(更快,更容易)吗?
答案 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])
}
}
}