У меня есть скрипт Google Sheets, который копирует диапазон ячеек с одной вкладки на другую.Проблема в том, что я хотел бы, чтобы он копировал только непустой диапазон ячеек, а вместо этого копировал весь диапазон, включая пустые строки.Есть много версий этой проблемы, которые уже обсуждались, но я не могу найти правильное решение, поэтому я спрашиваю его снова со всеми указанными ниже особенностями.
Диапазон, который я копирую, состоит из:
- Столбец A содержит формулу с выводом текста, если столбец B не пустой.Если столбец B пустой, формула в столбце A создает пустую запись (
""
). Столбцы B: J - это =IMPORTRANGE
из другого листа с диапазоном, установленным на A5:H
(открытый диапазон).
Вот текущий скрипт:
// custom menu function
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Copy Data');
var item = menu.addItem('Copy Data','copyData');
item.addToUi();
}
function copyData() {
// START1: get current sheet and tabs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var current = ss.getSheetByName('ImportRange');
var database = ss.getSheetByName('RunningList');
// count rows to snap
var current_rows = current.getLastRow();
var database_rows = database.getLastRow() + 1;
var database_rows_new = current_rows + database_rows - 3;
var rows_new = current.getRange('A3:J' + current_rows).getValues();
var nonblank_values = rows_new.filter(String);
// snap rows, can run this on a trigger to be timed
database.getRange(database_rows, 1, nonblank_values.length, nonblank_values[0].length).setValues(nonblank_values);
}
СпасибоВы потратили время на изучение этой проблемы.
РЕДАКТИРОВАТЬ 1
Когда я отлаживаю скрипт, похоже, что функция filter
фактически не отфильтровывает пустые строки.Так как бы я на самом деле это сделал?
Информация об отладке: