这将是我最近发的一篇文章的第二部分:行和列的脚本遍历
在这一部分中,我添加了一个数组,以便我浏览某些工作表,然后对它们进行循环并执行前面的代码。
function myFunction() {
var hojas = [
"Calvià",
"Inca",
"Manacor",
"LLucmajor",
"Sóller",
"Artà",
"Alcudia",
"Felaitx"
]
var nombres = 2;
var parque = 2;
var posiciong = 2;
var posiciongr = 2;
for (i=0; i<hojas.length + 1; i++){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(hojas[i]);
var lastrow = ss.getLastRow();
for (r=7; r<lastrow+1; r++){
var G = 0;
var GR = 0;
var range = ss.getRange(r,1).getValue();
if (range!=0){
var range2 = ss.getRange(r,4).getValue();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ContadorHoras").getRange(nombres, 1).setValue(range);
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ContadorHoras").getRange(parque, 2).setValue(range2);
nombres = nombres + 1;
parque = parque +1;
for (c=6; c<93; c++){
var rangec = ss.getRange(r,c).getValue().toString();
if (rangec=="G"){
G = G + 1;
}if (rangec=="GR"){
GR = GR + 1;
}
}
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ContadorHoras").getRange(posiciong, 3).setValue(G);
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ContadorHoras").getRange(posiciongr, 4).setValue(GR);
posiciong = posiciong + 1;
posiciongr = posiciongr + 1;
}
}
}
}
我认为代码很好,但问题是它需要超过 5 分钟才能完全执行,并且它让我完成了执行时间。问题是是否可以优化脚本以减少或增加执行时间,我已经读到第二个选项无法完成。
像 SpreadsheetApp 这样的 Google Apps 脚本服务在运行时“昂贵”,因此建议尽可能使用返回数组的方法,
setValues
而不是返回点值的方法,如setValue
.特别是,请考虑不要
setValue
在您的语句中使用for
2D Array并setValues
在该语句之后只传递所有值。另一件事可能会有所帮助,而不是
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ContadorHoras")
每次调用时都调用getRange
将其分配给变量。我的做法是在一定程度上尽量减少字符串的使用,因为这有助于在需要时进行代码调试,并且使用简短的语句使代码更易于阅读。我认为这也有助于 Google Apps Script 在内部执行的执行优化,但我没有测试过。
至于增加时间限制,G Suite 帐户限制为 30 分钟。
有关的