#google-apps-script #google-sheets
Вопрос:
У меня есть электронная таблица с тысячами строк, и некоторые записи имеют «#N/A» в первом столбце в результате поиска. Я хочу, чтобы эти строки были полностью скопированы на новый лист.
Пример:
ID | Другие Данные |
---|---|
#N/A | строка 1 |
123 | строка 2 |
#N/A | строка 3 |
#N/A | строка 4 |
#N/A | строка 5 |
456 | строка 6 |
Новый лист должен содержать строки с «#N/A» в поле идентификатора
ID | Другие Данные |
---|---|
#N/A | строка 1 |
#N/A | строка 3 |
#N/A | строка 4 |
#N/A | строка 5 |
Ответ №1:
Просто используйте формулу ФИЛЬТРА: =ФИЛЬТР(A2:B100, A2:A100=»#N/A»)
Ответ №2:
соедините листы с запросом, вот как бы я это сделал:
=query(importrange("https://docs.google.com/spreadsheets/d/ID",
"'SHEET 1'!A2:Z"),
"select * where Col1 = '#N/A'")
Вам придется проверить соединение между листами.
Ответ №3:
Вы можете обратиться к этому образцу кода о том, как отфильтровать данные с листа и записать их на новый лист с помощью скрипта приложений
Пример Кода:
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Custom Menu')
.addItem('Filter N/A', 'FilterNA')
.addToUi();
}
function FilterNA(){
var sheet = SpreadsheetApp.getActiveSheet();
var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
var data = sheet.getDataRange().getDisplayValues();
var newData = data.filter(row => ["ID","#N/A"].includes(row[0]));
newSheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);
}
Что он делает?
- Создайте пользовательское меню для запуска функции копирования
- Выберите активный лист и создайте новый лист с помощью insertSheet()
- Прочитайте данные в исходном листе с помощью getDataRange() и getDisplayValues()
- Отфильтруйте массив с помощью Array.filter(), в этом примере я создал список строк, которые я хочу отфильтровать («ID» и «#N/A»), затем проверьте, является ли столбец 1 текущей строки идентификатором или N/A, используя Array.includes()
- Запишите отфильтрованные данные на новый лист.
Выход:
Комментарии:
1. Пожалуйста, дайте мне знать, если у вас возникли какие-либо проблемы, чтобы я мог соответствующим образом обновить ответ, я только предположил, что вы хотите скопировать отфильтрованные данные на новый лист.