Веб-мастерская «web-SuN»

Профессиональная вебмастерская


 Предварительный заказ
02.03.2015  →  Exceeded maximum execution time в Google spreadsheet

Используя Google spreadsheet для обработки некоторых данных статистики, натолкнулся на ошибку "Exceeded maximum execution time". Превышение лимита времени на выполнение скрипта была связано с тем, что в таблицах операции чтения/записи довольно времязатратны. Об этом есть информация в документации.

Я не предвидел больших объемов данных, поэтому воспользовался старым методом записи данных в ячейки со сдвигом в цикле. Количество таких операций и привело к превышению временного лимита. Информация по теме была найдена быстро.

Есть, по-крайней, мере 2 способа решения проблемы Exceeded maximum execution time в Google scripts:

  1. Можно воспользоваться настраиваемыми триггерами
  2. Оптимизировать код

Второй пункт в данной ситуации сократит время выполнения скрипта в разы. Дело в том, что заменить запись данных в ячейки в цикле можно, используя буфер. Например сначала загоняем данные в двумерный массив, а потом с помощью метода setValues() вставляем данные в выделенную область (метод getRange()). На все про все одна операция записи!

Вот пример:

	var sourceSheet = ss.getSheetByName(sourceSheetName);
	var range = sourceSheet.getDataRange();
	var values = range.getValues();
	var newSheet = ss.getSheetByName(newSheetName);
	var allData = [];
	for (var i = 0; i < values.length; i++) {
		allData.push(['1','2','3']); //Строка для примера
	}
	//Записываем полученные результаты на лист Result
	var range = newSheet.getRange("A1:C"+allData.length);
	range.setValues(allData);

© ИП Половников С. А., 2014-2024

Действует на основании Свидетельства о государственной регистрации сер. 61 № 007596828 от 22 октября 2014 года.
Права на все материалы, опубликованные на сайте, принадлежат автору.
Незаконное копирование материалов преследуется по закону.
Использование материалов возможно лишь при наличии активной ссылки на источник.

Поделитесь в социальных сетях →  Веб-мастерская «web-SuN»
Проложим путь к успеху вместе!