我是 google 脚本的新手,我不确定为什么与 Excel VBA 的简单循环相比,我的性能如此差。
我附上了下面的代码,它是一个大约 1200 行的循环,每秒删除大约 2-3 行!
我写的脚本效率很低吗?我还不熟悉 Javascript,但它对我来说看起来并不是那么低效。
正常吗?现在服务器是否很慢,但通常好多了?
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var drng = sheet.getDataRange();
var rng = sheet.getRange(2,1, drng.getLastRow()-1,26);
var rangeformula = sheet.getRange(2,26, drng.getLastRow()-1);
rangeformula.setFormula('=SUM(K2:V2)'); var rngA = rng.getValues();
var len = rngA.length;
for(var i = len; i>=1; i--) {
if(rngA[i-2][25] == 0){
sheet.deleteRow(i);}}
好吧,对于初学者来说,删除行是一个如此昂贵的过程(与 VBA 相比)并不明显。这是我用来避免删除循环内的行的解决方法。
PS:我对此很陌生,所以这不是最优雅的方式,但可能对其他人有帮助。
function removeEmpty() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var drng = sheet.getDataRange();
var rng = sheet.getRange(2,1, drng.getLastRow()-1,26);
var rangeformula = sheet.getRange(2,26, drng.getLastRow()-1);
rangeformula.setFormula('=SUM(K2:V2)');
var rngA = rng.getValues();
var newRangeVals = [];
var len = rngA.length+1;
for(var i = len; i >=2; i--){
if(rngA[i-2][25] != 0){
newRangeVals.push(rngA[i-2]);
};
};
rng.clearContent();
var newRange = sheet.getRange(2,1,newRangeVals.length, newRangeVals[0].length);
newRange.setValues(newRangeVals);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)