#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);
}