javascript - 红灯警告

标签 javascript function google-sheets

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

脚本大量使用 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 脚本有 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();

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

关于javascript - 红灯警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006157/

相关文章:

regex - 使用 REGEXMATCH 从列表中取出剩余项目的列表 - + 号问题

javascript - 有条件加载脚本

javascript - AngularJs单元测试 'this'

python - 使用 SQLAlchemy 的数据库函数中的命名参数

function - 与函数组合混淆

google-apps-script - Google 表格不显示我的脚本上的函数

javascript - 自动导出 Node 功能的最佳实践

javascript - 调用函数并将参数从父级传递给 iframe

java - 从字符串中获取 x 值

r - 使用 RGoogleDocs 登录谷歌电子表格