是否可以在应用过滤器后复制值? 我想忽略隐藏的值。 我需要过滤超过 2000 行的工作表,如果我使用循环需要很长时间。 然后,我用这个:
var filteredRangefec = range.createFilter()
.setColumnFilterCriteria(6,filterCriteria)
.setColumnFilterCriteria(9, filterCriteriafecha)
.getRange();//range.getFilter().remove();
}
但是当我使用 GetValues 取所有值时,过滤而不是过滤
答案 0 :(得分:0)
这样就可以了。您只需将范围传递给 removeFilteredData()
函数,它就会返回过滤后的数组。
/**
* @param {SpreadsheetApp.Spreadsheet.Range} range
* @returns {Array<Array>}
*/
function removeFilteredValues(range) {
const values = range.getValues();
const firstRow = range.getRow();
const sheet = range.getSheet();
const filteredValues = values.filter((row, i) => {
return !(sheet.isRowHiddenByFilter(i + firstRow));
});
return filteredValues;
}
function main() {
const range = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet()
.getDataRange();
const result = removeFilteredValues(range);
}
答案 1 :(得分:0)
如果您想检索数据并在 Google Apps 脚本中对其进行操作,您可以创建临时工作表,使用 method:copyTo() 和 copyPasteType PASTE_NORMAL
将过滤后的数据复制到临时工作表并使用 method:getDataRange() 和 method:getValues() 检索数据。
示例数据:
我复制了 TheMaster 答案 here 并添加了一些功能:
function getFilteredValues(){
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var newSheet = activeSpreadsheet.getSheetByName("Temporary");
//check if existing, delete if yes
if (newSheet != null) {
activeSpreadsheet.deleteSheet(newSheet);
}
//create new sheet with name Temporary
newSheet = activeSpreadsheet.insertSheet();
newSheet.setName("Temporary");
var dataSheet = activeSpreadsheet.getSheetByName("Sheet1");
var toFilter = dataSheet.getDataRange();
var filter = toFilter.createFilter();
//create criteria
var criteria = SpreadsheetApp.newFilterCriteria();
criteria.whenNumberGreaterThan(1200);
//filter first column using the criteria above
filter.setColumnFilterCriteria(1, criteria.build());
//copy filtered data to temporary sheet
var sourceRange = dataSheet.getFilter().getRange();
sourceRange.copyTo(
newSheet.getRange('A1'),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
false);
Logger.log(newSheet.getDataRange().getValues());
activeSpreadsheet.deleteSheet(newSheet);
}
输出:
注意:您也可以使用它来将数据粘贴到工作表中。