Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to copy filtered spreadsheet data with Apps Script [duplicate]

I want to copy filtered data from one spreadsheet to another.

I've got a spreadsheet with some data in column A and column B: enter image description here

And I have a script that filters the data:

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
}

Which generates this filter view: enter image description here

However, Logger.log(data) gives me this result:

[[foo, bar], [1.0, A], [1.0, B], [1.0, C], [3.0, D], [5.0, D], [7.0, E], [7.0, A]]

The result I want to get is:

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

I want this result so I can write this filtered version of the data to a new spreadsheet.

like image 689
ems Avatar asked Oct 20 '25 01:10

ems


1 Answers

I got this to work by going through each row and adding a check for isRowHiddenByFilter, but this seems pretty inelegant. Other ideas welcome.

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
}
like image 190
ems Avatar answered Oct 22 '25 21:10

ems



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!