首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红色灯泡警告

红色灯泡警告
EN

Stack Overflow用户
提问于 2017-09-01 18:33:15
回答 1查看 81关注 0票数 1

每次运行时,我都会在sheets脚本编辑器中得到这条红色灯泡消息。密码有问题吗?它看起来很有效,而且不会花很长时间来执行。

方法Range.getValue被脚本大量使用

脚本使用了一种被认为很昂贵的方法。每次调用都会生成对远程服务器的耗时调用。这可能会对脚本的执行时间产生关键影响,特别是对大型数据。如果性能是脚本的问题,则应该考虑使用另一种方法,例如Range.getValues()

代码语言:javascript
复制
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')
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 17:31:39

Google脚本已经得到了开发团队推荐的最佳做法。重复的范围呼叫在操作上是昂贵的。最好是对范围数据进行批处理,然后迭代返回的对象。

现在,您正在请求每个循环中的两个对象。将所有数据作为单个对象来获取更为有效。因此,改变:

代码语言:javascript
复制
var range = sheet.getRange("A1:F"+(lastrow+1));

代码语言:javascript
复制
// range.getValues() returns a 2D array you can loop through in one call.
var range = sheet.getRange("A1:F"+(lastrow+1)).getValues();

并使用括号表示法遍历对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46006157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档