Вопрос или проблема
Возможно ли извлечь данные на основе ваших предпочтений? Например, мне нужно отобразить только столбцы 1, 5, 8, 11 и 23.
function showInputBox(){
var ui = SpreadsheetApp.getUi();
var input = ui.prompt("Пожалуйста, введите имя вашего представителя.", ui.ButtonSet.OK_CANCEL);
if(input.getSelectedButton() == ui.Button.OK){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Мониторинг (База данных)");
var data = ws.getRange("A2:X" + ws.getLastRow()).getValues();
var userSelectedRep = input.getResponseText();
var newData = data.filter(function(r){ return r[23] == userSelectedRep});
var newWs = ss.insertSheet(userSelectedRep);
newWs.getRange(2, 1, newData.length, newData[0].length).setValues(newData);
}
Я попробовал использовать getRangeList, но это не сработало. Я не уверен, возможно ли это. Я просто новичок, пытающийся добавить скрипт к данным в Google Sheets.
Вам не нужно getRangeList
. Вы можете вручную отфильтровать столбцы, извлекая только необходимые столбцы (1, 5, 8, 11 и 23).
function showInputBox() {
var ui = SpreadsheetApp.getUi();
var input = ui.prompt("Пожалуйста, введите имя вашего представителя.", ui.ButtonSet.OK_CANCEL);
if (input.getSelectedButton() == ui.Button.OK) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Мониторинг (База данных)");
var data = ws.getRange("A2:X" + ws.getLastRow()).getValues();
var userSelectedRep = input.getResponseText();
// Фильтрация данных по имени представителя в столбце 24 (23 по нумерации с нуля)
var newData = data.filter(function (r) { return r[23] == userSelectedRep });
// Извлечение только столбцов 1, 5, 8, 11 и 23
var selectedColumns = newData.map(function (r) {
return [r[0], r[4], r[7], r[10], r[22]];
});
// Создание нового листа и установка отобранных данных соответственно
var newWs = ss.insertSheet(userSelectedRep);
newWs.getRange(2, 1, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns);
}
}
Ответ или решение
Для того чтобы выбрать определенные диапазоны данных в результатах согласно вашим предпочтениям, можно использовать Google Apps Script. В вашем случае, вы хотите отфильтровать данные на основе имени представителя и вывести только определенные столбцы (1, 5, 8, 11 и 23).
Ниже представлен полный код, который выполняет эту задачу:
function showInputBox() {
// Создаем интерфейс для получения имени представителя
var ui = SpreadsheetApp.getUi();
var input = ui.prompt("Пожалуйста, введите имя вашего представителя.", ui.ButtonSet.OK_CANCEL);
// Проверяем, нажата ли кнопка OK
if (input.getSelectedButton() == ui.Button.OK) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Monitoring (Database)");
var data = ws.getRange("A2:X" + ws.getLastRow()).getValues(); // Получаем данные из таблицы
var userSelectedRep = input.getResponseText(); // Сохраняем введенное имя
// Фильтруем данные по имени представителя, находящемуся в 24-м столбце (индекс 23)
var newData = data.filter(function(r) { return r[23] == userSelectedRep; });
// Извлекаем только необходимые столбцы: 1, 5, 8, 11 и 23
var selectedColumns = newData.map(function(r) {
return [r[0], r[4], r[7], r[10], r[22]];
});
// Создаем новый лист и добавляем отфильтрованные данные
var newWs = ss.insertSheet(userSelectedRep);
newWs.getRange(2, 1, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns);
}
}
Объяснение кода:
-
Получение имени представителя: Используя метод
prompt
пользователь вводит имя представителя. -
Получение данных из листа: Метод
getRange
позволяет взять данные из диапазона с A2 по последний столбец X и каждую строку, содержащую данные. -
Фильтрация данных: Используется метод
filter
, который возвращает только те строки, где имя представителя совпадает с введенным. -
Извлечение нужных столбцов: С помощью метода
map
формируется новый массив, в который добавляются только требуемые столбцы: 1, 5, 8, 11 и 23. Обратите внимание, что индексы в массиве начинаются с нуля, поэтому соответствуют тем числам ниже:- 0 -> 1
- 4 -> 5
- 7 -> 8
- 10 -> 11
- 22 -> 23
-
Создание нового листа и добавление данных: Наконец, создается новый лист с именем представителя, и в него записываются отфильтрованные и отобранные данные.
Этот код достаточно прост, но эффективен для решения вашей задачи, и не использует getRangeList
, что упрощает код. Если у вас возникнут вопросы или потребуется помощь с изменением кода, не стесняйтесь обращаться за помощью.