Как сделать меньше вызовов для sheet.getRange и сократить время выполнения в двойном цикле - PullRequest
1 голос
/ 23 апреля 2019

Я хочу уменьшить количество вызовов sheet.getRange в следующей функции, потому что время ожидания истекло.

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

function runDuplicateRemover() {
 var sheet= SpreadsheetApp.getActive().getSheetByName('Sheet 1');
 var rangeData = sheet.getDataRange();
 var lastRow = rangeData.getLastRow();
 var Cdata = sheet.getDataRange().getValues();
  // here I am accessing the column which is used to find duplicates
 var colCRM = Cdata[0].indexOf("CRM ID")+1;
 var arrayOfDuplicates = [];

  for(i=1; i<lastRow; i++){
    var cellToCompare =  sheet.getRange(i+1,colCRM);
// I am just changing all the colors to see the execution
    cellToCompare.setBackground("#88b4fc");
    var crmToCompare =cellToCompare.getValue();
   //checks to see that this value is not already contained in the rows to delete
   if (!cellToCompare.isBlank() && (arrayOfDuplicates.indexOf(i)+1)==0 ){
       arrayOfDuplicates.push(i);
       cellToCompare.setBackground("#f9d9f9");

   for (j = i+1; j<lastRow; j++) {
      var cellCurrent = sheet.getRange(j+1,colCRM);
      cellCurrent.setBackground("#f2fc88");
      var crmCurrent = cellCurrent.getValue();   
      if (crmToCompare == crmCurrent) {

           arrayOfDuplicates.push(j);
           cellCurrent.setBackground("#fc92f1");

          }  
        }

       //pops last value since that's the only one I want to keep
      sheet.getRange(arrayOfDuplicates.pop()+1,colCRM).setBackground("#dbf7d4");

      }  
    }



   for (t = arrayOfDuplicates.length-1; t>=0; t--) {
      sheet.deleteRow(arrayOfDuplicates[t]+1);
    }
  }

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

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