저는 현재 회사에서 매주 수행하는 작업 중 하나를보다 쉽게 만들기 위해 새로운 스프레드 시트를 개발하고 있습니다. 데이터를이 스프레드 시트로 가져온 다음 작동시키는 방식입니다. 스크립트는 우리가 사용하는 보고서를 생성하기 위해 실행됩니다. 아래는 스프레드 시트의 한 부분을 작성하기 위해 만든 스크립트 중 하나의 예입니다.Google Apps Script - 최대 실행 시간을 초과했습니다.
스프레드 시트로 수동으로 가져온 데이터에는 최대 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;
}
}
}
많은 양의 데이터라도 시간 트리거를 사용하여 청크로 처리하고 현재 상태를 scriptProperties에 저장하도록 스크립트를 다시 작성해야 할 수도 있습니다. –
사용할 수있는 예가 있습니까? 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