Копировать только отфильтрованный диапазон на другой лист - PullRequest
0 голосов
/ 21 февраля 2019

Привет всем. Я пытался создать сценарии для копирования отфильтрованных данных, но не сделал этого.

Я хочу скопировать отфильтрованные данные на другой лист автоматически

function RejectSave() {
  var ss = SpreadsheetApp.getActive();
  var DataSheet = ss.getSheetByName('Import')

  ss.setActiveSheet(DataSheet, true);
  var sheet = ss.getActiveSheet();

  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).createFilter();

  var criteria = SpreadsheetApp.newFilterCriteria()
    .setHiddenValues(['', 'A', 'B', 'C'])
    .build();

  ss.getActiveSheet().getFilter().setColumnFilterCriteria(20, criteria);

  var SaveSheet = ss.getSheetByName('RAW')
  ss.setActiveSheet(SaveSheet, true);
  ss.getActiveSheet().insertRowsAfter(ss.getActiveSheet().getMaxRows(), 5);

  var SaveRange = SaveSheet.getRange(SaveSheet.getLastRow()+2, 1)

  DataSheet.getRange(2, 1, DataSheet.getLastRow(), 26)
    .copyTo(SaveRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  DataSheet.getFilter().remove();
};

, но сценарий не можетприносить только отфильтрованные данные, он приносит все данные в этом диапазоне, независимо от того, соответствует ли он критериям фильтра.

Я хочу скопировать только отфильтрованные данные !!

1 Ответ

0 голосов
/ 22 февраля 2019

Если критерии фильтрации известны до написания скрипта, то вам, вероятно, следует использовать массив JS filter() метод вместо листа Google getFilter().Например, следующая функция фильтрует исходный диапазон A1: C10, исключая строки со специальными значениями в столбце C. В результате она устанавливает новый (отфильтрованный) массив данных в начальной ячейке E1 (см. Также изображение).

function filtered() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get full (non-filtered) data
  var values = sheet.getRange('A1:C10').getValues();

  // Apply filter criteria here
  var hiddenValues = ['', 'A', 'B', 'C'];
  values = values.filter(function(v) {
    return hiddenValues.indexOf(v[2]) == -1;
  });

  // Set filtered data on the target sheet
  sheet.getRange(1, 5, values.length, 3).setValues(values);
}

Фильтрация JS является гибкой и довольно быстрой.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...