Удалить пустые строки в Google Sheets - PullRequest
1 голос
/ 15 марта 2020

У меня следующая проблема с этой функцией. Он удаляет только пустые строки ниже, но я хочу удалить строки выше.

function removeEmptyRows(){
  var sh = SpreadsheetApp.getActive();
  var sh1=sh.getSheetByName('name');
  var range=sh1.getRange('A:A');
  var maxRows = sh1.getMaxRows(); 
  var lastRow = sh1.getLastRow();
  sh1.deleteRows(lastRow+1, maxRows-lastRow);
}

Я пытался использовать следующую функцию

function removeemptyrows(){
    var ss=SpreadsheetApp.getActive();
    var sh1=ss.getSheetByName('name');
    var range=sh1.getRange('A:A');
    var values = range.getValues();
    for( var i = values.length-1; i >=0; i-- ) {
      for( var j = 0; j < values[i].length; j++ )
        if( values[i][j] === "" )
          sh1.deleteRow(i+1)
          }
  }

, но она удаляет строки слишком медленно - одну за другой.

1 Ответ

1 голос
/ 16 марта 2020
  • Вы хотите удалить строки, в которых ячейка столбца «А» пуста в диапазоне от 10 строк до нижней части листа.
  • Вы хотите добиться этого с помощью Google Apps Script.
  • Вы хотите уменьшить стоимость процесса.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точка модификации:

  • В этом случае я хотел бы предложить использовать Sheets API. При использовании Sheets API строки могут быть удалены одним вызовом API, даже если строки дискретизированы.

Пример сценария:

При использовании этого сценария включите API Sheets в расширенных службах Google.

function removeemptyrows() {
  var sheetName = "name"; // Please set the sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);
  var sheetId = sheet.getSheetId();
  var values = sheet.getRange('A10:A').getValues();
  var requests = values.reduce(function(ar, [e], i) {
    if (!e) ar.push({deleteDimension:{range:{sheetId:sheetId,dimension:"ROWS",startIndex:(i + 9),endIndex:(i + 10)}}});
    return ar;
  }, []).reverse();
  if (requests.length > 0) Sheets.Spreadsheets.batchUpdate({requests: requests}, ss.getId());
}
  • В этом случае пример сценария практически совпадает с приведенным ниже сценарием { ссылка }. Как 2 части модификации, в вашем случае вы хотите удалить строки пустой ячейки в столбце «А». Поэтому 'C6:C' + sheet.getLastRow() и if (e) были изменены на 'A10:A' и if (!e) соответственно.

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вам нужно, я приношу свои извинения.

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