我想为电子表格中的列创建过滤器,然后检索为过滤器创建的默认条件值列表。我相信我的代码返回了一个没有任何值的Filter对象。
function TestFilter(){
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
sheet.getRange(1, 2, sheet.getMaxRows(), 1).createFilter();
var filter = sheet.getFilter();
var output = filter.getColumnFilterCriteria(2).getCriteriaValues();
return output;
}
答案 0 :(得分:0)
您可以为此使用以下功能:
getHiddenValues()
返回要隐藏的值。
getVisibleValues()
返回要显示的值。
如果将过滤器设置为隐藏所有可能的值,则可以使用函数getHiddenValues()
获得所需的内容。
但是,如果您的过滤器仅隐藏值的子集,则将无法实现。在这种情况下,您可以使用以下Google Apps脚本函数来获取不同的值:
function getDistinctValues(range) {
var values = range.getValues();
var unique = {};
for (var i=0; i<values.length; i++) {
for (var j=0; j<values[i].length; j++) {
var key = values[i][j];
if (key !== null && key !== undefined && key !== '')
unique[key] = true;
}
}
return Object.keys(unique);
}
如果您试图在A列上获得不同的值,它将使用它:
var distinctValues = getDistinctValues(sheet.getRange("A2:A"));
请注意,此函数将以字符串形式返回值。如果要获取实际的数字值而不是字符串,则可以使用以下代码简单地解析值:
var distinctValues = getDistinctValues(sheet.getRange("A2:A")).map(parseFloat);
答案 1 :(得分:0)
我相信通过使用类似这样的功能,有3个功能中有2个存在错误:
var filter = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetName").getFilter();
var criteriaValues = filter.getColumnFilterCriteria(9).getCriteriaValues();
Logger.log("criteria Values length " + criteriaValues.length);
Logger.log(criteriaValues);
var visibleValues = filter.getColumnFilterCriteria(9).getVisibleValues();
Logger.log("visible Values length " + visibleValues.length);
Logger.log(visibleValues);
var hiddenValues = filter.getColumnFilterCriteria(9).getHiddenValues();
Logger.log("hidden Values length " + hiddenValues.length);
Logger.log(hiddenValues);
并在第I列(从左数第9位)上设置过滤器,无论我过滤的是多少个值或哪个值,我只会看到从该列中隐藏的值criteriaValues
和{ {1}}数组始终为空,而visibleValues
始终正确显示过滤出的值。
如果有人可以再次检查并确认它很棒,否则,也许我只是在做一些愚蠢的事情,在这种情况下,请让我知道:)。
这是根据https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria.html
创建的Blockquote