Сценарий превышает максимальное время выполнения - PullRequest
0 голосов
/ 11 января 2019

Я использую сценарий, чтобы сначала скопировать список всех прекращенных продуктов с вкладки «данные» листа на «прекращенную вкладку»

Вкладка данных выглядит следующим образом

Код проверяет, написана ли дата окончания если это так - строка копируется и вставляется во вкладку «прекращено»

После завершения всех строк (около 2000)

код удаляет все строки на вкладке "данные", в которых указана дата окончания

Но код не очень эффективен, а данные огромны - я получаю сообщение об ошибке «Превышено максимальное время выполнения»

function movingTerms() {
  var app = SpreadsheetApp ;
  var sheet1 =  app.getActiveSpreadsheet().getSheetByName("data") ;
  var sheet3 = app.getActiveSpreadsheet().getSheetByName("Terminations");

  var range1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1,9);
  var range3 = sheet3.getRange(2, 1, sheet3.getLastRow(), 9);

  var values1 = range1.getValues();
  var values3 = range3.getValues();
  var rowcount = sheet1.getLastRow();
  var row_deleted = 0; 

  for (var i = 0; i < (sheet1.getLastRow() - 1); i++) 
  {
    if (values1[i][4] !== "")     
    {
      var rowtodelete = sheet1.getRange(i + 2, 1, 1, 10);
      var rowtoadd = sheet3.getRange(sheet3.getLastRow() + 1, 1);
      rowtodelete.copyTo(rowtoadd);
    }
  }   

  for (var k = 0; k < values1.length; k++)
  {
    var row = k + 1 - row_deleted; 
    if (values1[k][4] !== "")       
    {
      var getridof  = row +1;
      sheet1.deleteRow(getridof);
      row_deleted++;
    } 
  }
}

1 Ответ

0 голосов
/ 11 января 2019

Я обычно хотел бы видеть электронную таблицу, чтобы сделать это правильно, но это способ, которым я бы сделал это.

function movingTerms() {
  var ss=SpreadsheetApp.getActive();
  var sheet1=ss.getSheetByName("data") ;
  var sheet3=ss.getSheetByName("Terminations");
  var range1=sheet1.getRange(2, 1, sheet1.getLastRow()-1,9);
  var range3=sheet3.getRange(2, 1, sheet3.getLastRow(),9);//You don't really need this
  var values1=range1.getValues();
  var values3=range3.getValues();//You don't really need this
  var rowcount=sheet1.getLastRow();
  var rowsdeleted = 0; 
  for (var i=0;i<values1.length;i++) {
    if (values1[i][4]!="") {//column5
      var rowtodelete = sheet1.getRange(i-rowsdeleted+2, 1, 1, 10);
      var rowtoadd = sheet3.getRange(sheet3.getLastRow()+1,1);//You could also append to sheet 3 if you wish
      rowtodelete.copyTo(rowtoadd);
      sheet1.deleteRow(i-rowsdeleted+2);
      rowsdeleted++;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...