Как скопировать отфильтрованные данные электронной таблицы с помощью скрипта Apps - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу скопировать отфильтрованные данные из одной электронной таблицы в другую.

У меня есть электронная таблица с некоторыми данными в столбце A и столбце B: enter image description here

И у меня есть скрипт, который фильтрует данные:

function get_data(value){
  value = 1
  var sheet = SpreadsheetApp.getActiveSheet()
  var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn())
  var filter = range.getFilter() || range.createFilter();
  var foo_index = 1; // column A
  var filterValue = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(value).build()

  filter.setColumnFilterCriteria(foo_index, filterValue)

  var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues()

  Logger.log(data)

  return data
}

, который генерирует это представление фильтра: enter image description here

Однако, Logger.log(data) дает мне этот результат:

[[foo,бар], [1,0, A], [1,0, B], [1,0, C], [3,0, D], [5,0, D], [7,0, E], [7,0, A]]

Результат, который я хочу получить:

[[foo, bar], [1.0, A], [1.0, B], [1.0, C]]

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

1 Ответ

1 голос
/ 21 сентября 2019

Я заставил это работать, пройдя каждую строку и добавив проверку для isRowHiddenByFilter, но это выглядит довольно не элегантно.Другие идеи приветствуются.

function get_data(value){
  value = 1
  var sheet = SpreadsheetApp.getActiveSheet()
  var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn())
  var filter = range.getFilter() || range.createFilter();
  var foo_index = 1; // column A
  var filterValue = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(value).build()

  filter.setColumnFilterCriteria(foo_index, filterValue)

  // new code
  var data = []

  for (var i = 1; i < sheet.getLastRow(); i++) {
    if(!sheet.isRowHiddenByFilter(i)) {
      var row_data = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues()
      data.push(row_data[0])
    }
  }
  // end new code

  Logger.log(data)

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