1
我目前正在为我的公司开发一个新的电子表格,以使我们每周执行的任务之一更容易 - 它的工作方式是将数据导入到此电子表格中,然后运行脚本来生成我们使用的报告。下面是我为编制电子表格的一部分而编写的一个脚本示例。Google Apps脚本 - 超出最长执行时间
手动导入到电子表格中的数据最多可以包含3000个信息单元,因此用于检查单元格的循环 - 但是无论何时运行此脚本,它都将启动到第1617行,然后向我提供超出最大错误执行时间 - 是否有避免这个问题,因为我有几个脚本需要后来运行,以帮助生成我们使用的报告。
有6张纸,每张纸都有数据输入,取决于已导入数据中的单元格值。
function WorkoutTotals() {
// -----------------------------------------------------------------------------
// This function is used for working out the totals of each centre
// -----------------------------------------------------------------------------
var value;
for (var j = 2; j < abignumber; j++) {
var rawcentres = rawdata.getRange(j, 1);
var rawcategory = rawdata.getRange(j, 6);
switch (rawcentres.getValue()) {
case centres[0]:
centresheet = ss.getSheetByName(sheets[0]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
case centres[1]:
centresheet = ss.getSheetByName(sheets[1]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
case centres[2]:
centresheet = ss.getSheetByName(sheets[2]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
case centres[3]:
centresheet = ss.getSheetByName(sheets[3]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
case centres[4]:
centresheet = ss.getSheetByName(sheets[4]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
case centres[5]:
centresheet = ss.getSheetByName(sheets[5]);
switch (rawcategory.getValue()) {
case "a1":
range = centresheet.getRange(cramrow, 1)
range.setValue(range.getValue() + 1)
break;
case "A2":
range = centresheet.getRange(cramrow, 2)
range.setValue(range.getValue() + 1)
break;
case "a3":
range = centresheet.getRange(cramrow, 3)
range.setValue(range.getValue() + 1)
break;
case "a4":
range = centresheet.getRange(cramrow, 4)
range.setValue(range.getValue() + 1)
break;
case "a5":
range = centresheet.getRange(cramrow, 5)
range.setValue(range.getValue() + 1)
break;
case "a6":
range = centresheet.getRange(cramrow, 6)
range.setValue(range.getValue() + 1)
break;
case "a7":
range = centresheet.getRange(cramrow, 7)
range.setValue(range.getValue() + 1)
break;
case "a8":
range = centresheet.getRange(cramrow, 8)
range.setValue(range.getValue() + 1)
break;
case "a9":
range = centresheet.getRange(cramrow, 9)
range.setValue(range.getValue() + 1)
break;
case "a10":
range = centresheet.getRange(cramrow, 10)
range.setValue(range.getValue() + 1)
break;
}
break;
}
break;
}
}
}
即使对于很多数据,您可能需要重写脚本,以便使用时间触发块进行处理,并将其当前状态保存在script中PropertyProperties –
您是否偶然有一个我可以使用的示例?我很少使用JavaScript代码,因此我的代码很差= /。 – Andy
@Chris是正确的,批量读/写应该解决这个问题。还有一些关于阅读/书写电子表格的教程作为对象https://developers.google.com/apps-script/guides/sheets。如果仍然需要分块脚本,则最近的自定义脚本库已经发布,以执行此操作。http://patt0.blogspot.in/2014/01/using-scriptapp-to-process-batches-in.html – mhawksey