我可以提供更多关于我项目的背景信息(如有必要),但这里是底线。
我有一个包含超过900个需要处理的订单项的电子表格。每个订单项需要经过2-6个不同的团队成员进行处理(具体取决于项目类型,因此有些人可能是2人,有些可能是6人)。我正在尝试创建每个订单项与每个团队成员的持续时间的指标。
在电子表格的第二个标签页上,我再次列出了所有900个订单项,这是我打算跟踪状态以及何时转移到下一个状态的时间戳。从那里我可以做一些分析,看看每个订单项从一个状态移动到下一个状态需要多长时间。
我编写了一个脚本来查看两个标签并匹配主键上的订单项(初始时间戳),然后查看主电子表格中每行所处的状态,并将其与我的指标中记录的状态进行比较标签。如果它处于不同的状态,那么我的脚本将记录新状态并为新状态添加时间戳。
我的脚本有效,但速度非常慢,在达到最大时间执行之前,我只能通过大约50行。 我只需要帮助使脚本更有效率,这样它就可以在一次执行中完成所有900行。
add_to_many
答案 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
一次。