Как удалить пустые ячейки в определенном столбце с помощью скрипта приложений?

#javascript #arrays #google-apps-script #google-sheets

Вопрос:

Цель состоит в том, чтобы удалить пустые ячейки только в столбце N, не нарушая другие столбцы, и переместить остальные ячейки вверх, чтобы получить компактный столбец только с непустыми ячейками. Конечно, после результата могут и будут пустые ячейки. Пожалуйста, предложите способ

 function Defaulters() {
    var spreadsheet = SpreadsheetApp.getActive();
    var as = spreadsheet.getActiveSheet();
 

    //to get the last row of the Column
      
    var lastRow = 100;
    var range = as.getRange("N"   lastRow);

    if (range.getValue() !== "") 
    
    {Logger.log(lastRow);}
    
    {lastRow = range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();}

    Logger.log(lastRow);
  
    //to delete the empty cells and give a compact output of just names and emails in the Column

    for (var l=lastRow; l>=3; l--)
    {if(as.getRange(l,14).getValue() == "")

     Logger.log(true); **//what to put here to delete this cell?**

     else

     Logger.log(false);**// what to put here to retain this cell?**
  }
}
 

Комментарии:

1. Вы имели в виду удалить все строки, в которых есть пустые ячейки в столбце «N», или удалить пустые ячейки из столбца (и, я полагаю, переместить остальные ячейки вверх) и сохранить ячейки в других столбцах нетронутыми?

2. эй, @YuriKhristich, теперь добавил немного больше деталей к вопросу, это последнее.

3. Работает ли мое решение (третий образец) для вас? Он должен делать именно то, что вы описываете: удалять пустые ячейки в столбце » N «и сдвигать остальные ячейки (в столбце «N») вверх.

4. @YuriKhristich Спасибо, приятель, твое решение сработало для меня. Просто новичок, так что еще одно небольшое сомнение, скажите, что мне нужно сделать то же самое для столбцов N и O, что мне делать? На данный момент я просто индивидуально использую формулу дважды.

5. На самом деле я бы сделал примерно то же самое: использовал эту функцию два раза. Единственное, что я бы изменил, — это добавил аргумент в функцию function clean_column(col) . Adn вызывает эту функцию для очистки любого столбца: clean_column('A') , clean_column('B') , и т.д. Смотрите мой обновленный ответ.

Ответ №1:

Я бы попробовал что-нибудь вроде этого:

 function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues(); // get all data
  const data_new = data.filter(row => row[13] != ''); // filter the data by column 'N'
  sheet.clearContents(); // clean the sheet
  sheet.getRange(1,1,data_new.length,data_new[0].length)
    .setValues(data_new); // put the new data back on the sheet
}
 

Или даже вот так:

 function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues().filter(row => row[13] != '');
  sheet.clearContents().getRange(1,1,data.length,data[0].length).setValues(data);
}
 

Если вам нужно сохранить всю таблицу в целости и удалить пустые ячейки только из столбца «N», это можно сделать следующим образом:

 function clean_column_N() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange('N3:N' sheet.getLastRow())       // get a range start from row 3
  const data = range.getValues().filter(String);                // get a data and remove empty elements
  range.clearContent().offset(0,0,data.length).setValues(data); // put the data back on the sheeet
}
 

Все данные в столбце » N » будут перемещены вверх.

Обновить

Изменен последний вариант для очистки любой колонки:

 function main() {
  clean_column('N');
  clean_column('O');
}

function clean_column(col) {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange(col   '3:'   col   sheet.getLastRow());
  const data = range.getValues().filter(String);
  range.clearContent().offset(0,0,data.length).setValues(data);
}