Как выбрать определенные диапазоны в результатах

Вопрос или проблема

Возможно ли извлечь данные на основе ваших предпочтений? Например, мне нужно отобразить только столбцы 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);
  }
}

Объяснение кода:

  1. Получение имени представителя: Используя метод prompt пользователь вводит имя представителя.

  2. Получение данных из листа: Метод getRange позволяет взять данные из диапазона с A2 по последний столбец X и каждую строку, содержащую данные.

  3. Фильтрация данных: Используется метод filter, который возвращает только те строки, где имя представителя совпадает с введенным.

  4. Извлечение нужных столбцов: С помощью метода map формируется новый массив, в который добавляются только требуемые столбцы: 1, 5, 8, 11 и 23. Обратите внимание, что индексы в массиве начинаются с нуля, поэтому соответствуют тем числам ниже:

    • 0 -> 1
    • 4 -> 5
    • 7 -> 8
    • 10 -> 11
    • 22 -> 23
  5. Создание нового листа и добавление данных: Наконец, создается новый лист с именем представителя, и в него записываются отфильтрованные и отобранные данные.

Этот код достаточно прост, но эффективен для решения вашей задачи, и не использует getRangeList, что упрощает код. Если у вас возникнут вопросы или потребуется помощь с изменением кода, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...