每次运行时,我都会在工作表脚本编辑器中不断收到此红色灯泡消息。代码有问题吗?它似乎可以正常运行,并且执行时间并不长。

脚本大量使用方法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')
}

最佳答案

开发团队建议Google Apps Script 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();


并使用括号符号遍历对象。

07-26 02:30