ГАЗ - найти пустые клетки довольно медленно - PullRequest
0 голосов
/ 02 октября 2019

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

    for(var t = 2; t <= lastrow; t++)
   {

   if (Geojson_Data.getRange(t,col1).getValue() == "")
   {
    Geojson_Data.deleteRow(t);

   }
   }

Ответы [ 2 ]

1 голос
/ 02 октября 2019
function delRowsWithNothingInColA() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(2,1,sh.getLastRow()-1,1);
  var vA=rg.getValues();
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(vA[i][0]=='') {
      sh.deleteRow(i+2-d++)
    }
  }
}
0 голосов
/ 02 октября 2019
var values = Geojson_Data.getDataRange().getValues();
var col1Arr = col1 - 1;

var t = values.length;
while(t--) 
  if(values[t][col1Arr] === '')
    Geojson_Data.deleteRow(t + 1);

Если вам нужен действительно инструмент, посмотрите на фрагмент Сценарий удаляет строки в пакетах без изменения очереди строк и без разрушения формул.

/**
 * Runs the snippet.
 * Removes rows by condition 'A:A=""'.
 * @ignore
 */
function run() {
  var sheet = SpreadsheetApp.getActiveSheet();
  deleteRowsByConditional_(sheet, function(row) {
    return row[0] === '';
  });
}

function deleteRowsByConditional_(sheet, condition, action) {
  var values = sheet.getDataRange().getValues();
  values.unshift([]);
  values.reverse().forEach(
    function() {
      var i = this.l - arguments[1];
      if (this.condition.apply(null, [arguments[0], i, arguments[2]])) {
        this.isContinue++;
      } else if (this.isContinue) {
        if (action) action(arguments[2], i, this.isContinue);
        this.sheet.deleteRows(i, this.isContinue);
        this.isContinue = 0;
      }
    },
    { sheet: sheet, condition: condition, isContinue: 0, l: values.length }
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...