В настоящее время я разрабатываю новую таблицу для своей компании, чтобы сделать одну из задач, которые мы делаем на еженедельной основе, более простой - способ ее работы заключается в том, что данные импортируются в эту таблицу, а затем сценарии запускаются для генерации отчетов, которые мы используем. Ниже приведен пример одного из сценариев, которые я сделал для разработки одной части таблицы.Сценарий 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;
}
}
}
Даже тогда для большого количества данных вам может потребоваться перезаписать сценарий, чтобы он обрабатывал куски с помощью триггера времени и сохранял текущее состояние, сохраненное в scriptProperties. –
Есть ли у вас пример, который я мог бы использовать? Я очень редко кодирую JavaScript, поэтому мой плохой код = /. – Andy
@ Крис прав, что пакетное чтение/запись должно решить эту проблему. Существуют также учебные пособия по чтению/письму электронных таблиц как объекты https://developers.google.com/apps-script/guides/sheets. Если chunking сценарий по-прежнему требуется, была опубликована новая пользовательская библиотека скриптов для этого http://patt0.blogspot.in/2014/01/using-scriptapp-to-process-batches-in.html – mhawksey