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:
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:
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.
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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With