首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环遍历数据并根据单元格值设置IndexMatch公式-由于.getValue()太慢

循环遍历数据并根据单元格值设置IndexMatch公式-由于.getValue()太慢
EN

Stack Overflow用户
提问于 2018-10-18 18:10:08
回答 1查看 55关注 0票数 1

我有一个代码,它循环遍历我的行,并根据第2列中的值返回不同类型的IndexMatch公式。我的代码运行得很好,并将公式放在相关的列中,但是速度非常慢。

我得到一条消息,.getValue()非常重,因此会减慢代码的速度。

现在我需要弄清楚如何提高代码的速度,但由于我是编码新手,我不是特别确定如何解决这个问题。

这就是我所拥有的:

代码语言:javascript
复制
function setFormulas() {

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //gets the workbook being used
  var sheet = ss.getSheetByName("Open Requests"); //gets the active worksheet


  var sheetnametoWatch ="Open Requests"; //defines sheet 

  var columnnumbertoWatch = 14
  var valuetoWatch = ""
  var CostCenter = "'Open Requests'!"
  var lastrow = sheet.getLastRow();

  var datarange = sheet.getRange(11,2,lastrow -1,50).getValues()
  var row = 10

  for (i=0;i<datarange.length;i++){
    var rowID = 10 + i + 1

    if (datarange[i][0] == "CC"){
      var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
      sheet.getRange(row + i+1,35).setFormula(addedCell);

      var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
      sheet.getRange(row + i+1,17).setFormula(MatchedCell); 

      sheet.getRange(row + i+1,18).setValue("kristin.j@ni.com")
    }
    else if (datarange[i][0] == "CC + TM1"){
      var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
      sheet.getRange(row + i+1,35).setFormula(addedCell);

      var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
      sheet.getRange(row + i+1,17).setFormula(MatchedCell); 

      sheet.getRange(row + i+1,18).setValue("kristin.j@ni.com")
    }
    else if (datarange[i][0] == "GC"){
      sheet.getRange(row + i+1,18).setValue("kristin.j@ni.com")
    }

  }

 }

正如您所看到的,我正在遍历数据,然后根据列是否= CC、CC+TM1、GC,它会将其他单元格设置为等于相关公式。

如果有人能帮助我加快这个过程,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 06:35:42

我很难理解代码到底做了什么,但从更高的层次来看,我认为您应该这样做:不是在循环for循环时为特定的单元格设置公式,而是使用循环来确定哪些单元格应该设置为哪些公式,并存储这些信息。然后,在for循环结束时,只调用sheet.getRange(x,y).setFormula(Formula);几次,可能每个公式调用一次。

这看起来能行得通吗?

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

https://stackoverflow.com/questions/52871715

复制
相关文章

相似问题

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