每次运行时,我都会在工作表脚本编辑器中收到此红色灯泡消息。代码有问题吗?它似乎有效,并且执行时间不长。
方法Range.getValue被脚本大量使用
该脚本使用的方法很昂贵。每次调用都会生成一个耗时的远程服务器调用。这可能会对脚本的执行时间产生严重影响,尤其是对大型数据。如果性能是脚本的问题,则应考虑使用其他方法,例如: Range.getValues()
function Merge() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Expense Index');
var lastrow=sheet.getLastRow();
var range = sheet.getRange("A1:F"+(lastrow+1));
var k=3;
for (var i = 4; i <=lastrow+1; i++) {
var val1=range.getCell(i-1, 1).getValue();
var val2=range.getCell(i, 1).getValue();
if(val1!==val2){
if(!(sheet.getRange('A'+k+':A'+(i-1)).isPartOfMerge())){
sheet.getRange('A'+k+':A'+(i-1)).mergeVertically();
range.getCell((i-1), 6).setValue('=SUM(E'+k+':E'+(i-1)+')');
}
k=i;
}
}
sheet.getRange("A1:F"+(lastrow+1)).setHorizontalAlignment('center');
sheet.getRange("A1:F"+(lastrow+1)).setVerticalAlignment('middle')
}
答案 0 :(得分:0)
Google Apps脚本已由开发团队推荐best practices。进行重复范围呼叫在操作中是昂贵的。批处理范围数据然后迭代返回的对象要好得多。
现在,您在每个循环上请求2个对象。将所有数据作为单个对象获得更高效。所以,改变:
var range = sheet.getRange("A1:F"+(lastrow+1));
到
// range.getValues() returns a 2D array you can loop through in one call.
var range = sheet.getRange("A1:F"+(lastrow+1)).getValues();
并使用括号表示法遍历对象。