我的电子表格包含100k +行和一列,google脚本每行应用大约10个正则表达式,并将结果存储在电子表格中。在结束时,我有100 k +行和10列的表。
所有逻辑写在JS上,计算分别运行到每个10k行,因为执行时间受到6分钟的限制。它不时需要超过6分钟并且会出错,并且需要在我的电脑上安装巨型JS内存。
我想要的是更快地完成它,而不需要我的计算。
请提供一些建议,谷歌云服务可以用于此吗?
我知道代码不优雅,而且可以稍微优化一下,但这里是:
function RegExForCombine4(sa,parametr,FR,LR,ValForRep,Categoris1,RegExpsLeng,ObjmyArrRegEx,RegexpsObjects,ObjmyArrRegExStrings,catOrnot,colForStart){
var ValForRepLeng = ValForRep.length
var ChangeVals = [];
for (var y=0;y<Categoris1.length;y++){
for (var q = 0;q<RegExpsLeng;q++){
if(ValForRep[y].indexOf(RegexpsObjects[Categoris1[y]][q][parametr*2]) !== -1){
ValForRep[y]=ObjmyArrRegExStrings[Categoris1[y]][q][parametr*2+1]
ChangeVals.push([ValForRep[y]])
break
}
if(ValForRep[y].match(RegexpsObjects[Categoris1[y]][q][parametr*2])){
ValForRep[y]=ValForRep[y].replace(ObjmyArrRegEx[Categoris1[y]][q][parametr*2], ObjmyArrRegEx[Categoris1[y]][q][parametr*2+1]);
ChangeVals.push([ValForRep[y]])
break
}
}
}
sa.getRange(FR,parametr+colForStart+catOrnot,ChangeVals.length,1).setValues(ChangeVals)
}
function BaseRegExForCombine4(sheetName,FR,LR,RegExpsLeng,FC,LC,catOrnot,colForStart){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sa = ss.getSheetByName(sheetName);
var ValForRepBase = sa.getRange(FR,1,LR,1).getValues();
var ValForRep =[]
for(var v=0;v<ValForRepBase.length;v++){
ValForRep[v]=ValForRepBase[v].toString().toLowerCase()
}
var ValForRepCopy = []
var Categoris1 = sa.getRange(FR,colForStart,LR,1).getValues();
var RegexpsObjects = {}
if(catOrnot==0){
for(var u = 0;u<Categoris1.length;u++){
Categoris1[u]='Категории';
}
} else {
for(var u = 0;u<Categoris1.length;u++){
Categoris1[u]=Categoris1[u].toString();
}
}
var Categoris = unique(Categoris1);
for(var u=0;u<=LC+1;u++){
ValForRepCopy[u]=ValForRep.slice(0)
}
for(var u=0;u<Categoris.length;u++){
try{
RegexpsObjects[Categoris[u]]=ss.getSheetByName(Categoris[u]).getRange(26, 3, RegExpsLeng, 20).getValues();
} catch(e){}
}
var ObjmyArrRegEx = {};
var ObjmyArrRegExStrings = {};
for(var u=0;u<Categoris.length;u++){
ObjmyArrRegEx[Categoris[u]]=ss.getSheetByName(Categoris[u]).getRange(26, 3, RegExpsLeng, 20).getValues();
ObjmyArrRegExStrings[Categoris[u]]=ss.getSheetByName(Categoris[u]).getRange(26, 3, RegExpsLeng, 20).getValues();
for (var y=0;y<9;y++){
for (var r=0;r<20;r++){
ObjmyArrRegEx[Categoris[u]][r][y*2] = new RegExp(RegexpsObjects[Categoris[u]][r][y*2],"gi");
ObjmyArrRegExStrings[Categoris[u]][r][y*2]=RegexpsObjects[Categoris[u]][r][y*2+1].toString();
}
}
}
for(i=FC;i<=LC;i++){
RegExForCombine4(sa,i,FR,LR,ValForRepCopy[i],Categoris1,RegExpsLeng,ObjmyArrRegEx,RegexpsObjects,ObjmyArrRegExStrings,catOrnot,colForStart)
}
}
function AddressRegExForCombineByCategory(sheetName,category,FC,LC){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
var lastrowonSheet = ss.getLastRow()
ss.getRange(10, 1, lastrowonSheet ,15).sort(8)
var categorys = ss.getRange(1, 8,lastrowonSheet-10,1).getValues()
for (var i=0;i<categorys.length;i++){
categorys[i]=categorys[i].toString()
}
var FR = categorys.indexOf(category)+1
var LR = categorys.lastIndexOf(category)+2
var LastA1Not = LR-FR
var RegExpsLeng = 20
BaseRegExForCombine4(sheetName,FR,LastA1Not,RegExpsLeng,FC,LC,1,8)
Library1.setformula(sheetName,"=JOIN(\" \";H"+FR+":R"+FR+")",'G'+FR+':G'+LR)
}