2015-10-21 4 views
1

Я нахожусь здесь на моем остроумие. У меня было три сценария, которые прекрасно работали, а затем в одночасье все они потерпели неудачу с ужасной «Ошибка обслуживания».Ошибка обслуживания: электронные таблицы (getLastRow)

Ошибка всегда ссылается на getLastRow как на оскорбительную линию. Я попытался добавить и удалить строки в нижней части листа, удалив некоторые из строк с данными в них, размораживая заголовки и столбцы и т. Д., Не повезло. Я также попытался вернуться к версии сценария на прошлой неделе, задолго до неудачи (первый был в понедельник вечером), безрезультатно.

Я провел много исследований, и я чаще всего замечал то, что исправляет эти ошибки обслуживания, что-то совершенно случайное. Некоторые люди говорят, что эта ошибка вызвана записью в конце Google. Если да, то что я могу сделать, чтобы исправить это?

Огромный проект в основном сбой и сжигание, потому что эти сценарии не помогли ... любая помощь была бы потрясающей. Благодарю.

Для справки, один из моих сценариев (тот, который не сработал первым).

function timeStamp2() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheets()[4]; 
var numRows = sheet.getLastRow()-1; // Number of rows to process 
Logger.log(numRows) 
var startRow = 2; // First row of data to process 
// Fetch the range of cells 
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()); 
// Fetch values for each row in the Range. 
var data = dataRange.getValues(); 
//Logger.log(data) 

for (var i = 0; i < data.length; ++i) { 
var row = data[i]; 

var schedulingStatus = row[4]; 
var timeStamp = row[3]; 
var scheduled = "Scheduled"; 

    if(timeStamp === '') { 
    if(schedulingStatus == scheduled) { 
     sheet.getRange(startRow + i, 3).setValue(new Date()); 

    } 
    } 
} 
} 
+0

Случается ли это только при запланированных запусках, а также при автоматическом запуске? Лили очень большие? –

+0

@robin Это происходит с помощью триггера, а также вручную. Лист находится на большей стороне, но я попытался разобрать/удалить некоторые вкладки, и он все еще дает ошибку ... – ebreckley

ответ

0

Вы правильно считаете свои позиции в массиве?

ss.getSheets()[4] 

означает, что это пятый лист. Я также заметил, что, хотя инициализируем TIMESTAMP в качестве значения в четвертом столбце строки:

var timeStamp = row[3] 

позже на вас:

sheet.getRange(startRow + i, 3).setValue(new Date()) 

в третьем столбце строки. т.е. строка [3] - это одна ячейка справа от sheet.getRange (startRow + i, 3).

+0

Это все правильно - я также использовал регистратор для проверки, и проблема не устранена. :( – ebreckley

1

Независимо от того, является ли это «ответом», я не могу судить, но будьте уверены, что вы не одиноки в том, что заметили спорадическое поведение некоторых встроенных функций GAS - в частности, несколько общего использования с электронными таблицами для добавления новых строк или поиска последней строки/столбец данных, из-за чрезвычайно продолжительного времени выполнения, который превзошел мой собственный код и другие, часто до 20 секунд на экземпляр!

Я настаиваю, что в getLastRow() должен быть скрытый хронометраж, как показано ниже. Проблема теперь регулярно приводит к тайм-аутам в моем рабочем процессе и генерирует частые сбои и Ошибка обслуживания: электронные таблицы сообщений.

Например, если выполнить следующий код функции каждую минуту (через таймерной Trigger) ...

function getLastRow_TEST() { 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     var sheet = ss.getSheetByName("getLastRow_TEST"); 
     var timeBegin = Date.now(); 
     var nextRow = sheet.getLastRow() + 1; 
     var timeEnd = Date.now(); 
     var range = sheet.getRange("A" + nextRow + ":B" + nextRow); 
     var timeElapsed = (timeEnd - timeBegin)/1000; 
     range.setValues([[nextRow - 1, timeElapsed]]); 
    } 

... на тестовой таблице, содержащий лист с именем «getLastRow_TEST», вы скоро заметите кластерные задержки (> 1 сек.), как показано в полученных данных (собранных в 10:55 в понедельник, 6/13/2016), но без различимого рисунка возникновения:

TEST # SECONDS 
    1  0.041 
    2  10.242 * 
    3  10.256 * 
    4  5.194 * 
    5  0.055 
    6  0.178 

NOTE : Это тестирование было выполнено с помощью (пустой), без использования другого кода, триггеры с синхронизацией по времени или активная блокировка скрипта.

Я пытаюсь представить этот вопрос в качестве отчета об ошибке в отношении отслеживания проблем Google, но я был вынужден поделиться своим опытом с вами здесь (я опубликовал в другом месте о SO об этом сбое).

+0

Спасибо за солидарность в решении этой проблемы. Мне пришлось просто создавать целые новые листы и новые скрипты, так как я не могу их решить. Добавление возвращаемых значений в мой скрипт или их запись таким образом, чтобы исключить длинные циклы функций, похоже, помогают предотвратить проблему, которая поддерживает вашу теорию, связанную с временем выполнения. Здесь мы надеемся, что Google что-то с этим поделает. – ebreckley

0

У меня была аналогичная проблема со сценарием, который я написал.

Он дал сообщение об обслуживании: в таблицах говорилось, что проблема связана с линией, содержащей getLastRow.

Мое исправление закончилось тем, что было сделано хотя бы один ряд внизу, без каких-либо данных. С тех пор не было проблем.

Смежные вопросы