Время ожидания скрипта Google - PullRequest
0 голосов
/ 23 января 2020

Мой сценарий истекает, я думаю, потому что он превышает 6-минутный лимит. Кто-нибудь знает, как я могу оптимизировать его, чтобы он работал быстрее?

Цель этого сценария - скопировать все данные с одного листа на другой лист, а затем заполнить некоторые формулы на листе назначения.

Объем копируемых данных достаточно велик (20 000 строк и столбцов в R), но я не думаю, что это так много, что это должно истечь? Я очень новичок в этом, поэтому любые советы приветствуются!

Вот сценарий:

function copyPasteTo2ndSheet()
{
  var copyURL = 'ThisIsTheOriginSheetURL';
  var pasteURL = 'ThisIsTheDestinationSheetURL';

  var ssCopy = SpreadsheetApp.openByUrl(copyURL);
  var ssPaste = SpreadsheetApp.openByUrl(pasteURL);

  var copySheet = ssCopy.getSheetByName('Orders');
  var pasteSheet = ssPaste.getSheetByName('Orders');
  var lr = copySheet.getLastRow();
  var copyData = copySheet.getRange('A2:R'+lr).getDisplayValues(); 
  var pasteLr = pasteSheet.getLastRow();
  pasteSheet.getRange('A2:R'+pasteLr).clear();
  pasteSheet.getRange('A2:R'+lr).setValues(copyData);

  copyPasteFormula(pasteSheet)
}

function copyPasteFormula(sheet)
{
  var formulas = sheet.getRange(2, 1, 1, sheet.getLastColumn()).getFormulas()[0];
  var lr = sheet.getLastRow();
  for(var i in formulas)
  {
    var formula = formulas[i];
    if(formula !== '')
    {
      var j = parseInt(i)+1;
      sheet.getRange(3, j, lr, 1).setFormula(formula);
    }
  }
}

1 Ответ

1 голос
/ 23 января 2020

Судя по моему опыту, возникла проблема с строкой sheet.getRange (3, j, lr, 1), которая должна повторяться для 20 000 ячеек.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...