优化运行超过900行循环的Google Apps脚本

时间:2017-01-11 16:17:14

标签: loops google-apps-script

我可以提供更多关于我项目的背景信息(如有必要),但这里是底线。

我有一个包含超过900个需要处理的订单项的电子表格。每个订单项需要经过2-6个不同的团队成员进行处理(具体取决于项目类型,因此有些人可能是2人,有些可能是6人)。我正在尝试创建每个订单项与每个团队成员的持续时间的指标。

在电子表格的第二个标签页上,我再次列出了所有900个订单项,这是我打算跟踪状态以及何时转移到下一个状态的时间戳。从那里我可以做一些分析,看看每个订单项从一个状态移动到下一个状态需要多长时间。

我编写了一个脚本来查看两个标签并匹配主键上的订单项(初始时间戳),然后查看主电子表格中每行所处的状态,并将其与我的指标中记录的状态进行比较标签。如果它处于不同的状态,那么我的脚本将记录新状态并为新状态添加时间戳。

我的脚本有效,但速度非常慢,在达到最大时间执行之前,我只能通过大约50行。 我只需要帮助使脚本更有效率,这样它就可以在一次执行中完成所有900行。

add_to_many

1 个答案:

答案 0 :(得分:2)

标准建议是不要在循环中使用getValue:use batch operation getValues instead。在你的情况下,这将是

var allData = metricsS.getDataRange().getValues();

// now we have all data, so loop through this JavaScript array

for (var j = 1; j < allData.length ; j++) {
  for (var i = 1; i < allData.length ; i++) { 
    if (allData[i][2] > allData[j][0]) {  // some condition
      // do something
    }          
  }
}

请记住,当行/列号以1开头时,JavaScript索引从0开始。因此,循环遍历以2nd开头的所有行意味着以索引1开始循环,如上所述。

setValue类似:将所有输出放入双JavaScript数组中,然后在循环结束后应用setValues一次。