是否有可能得到我的数据集的筛选条件。例如,如果我的一列是“部门”,我过滤数据只显示“IT”。我们如何获取筛选条件“IT”?我需要将这个筛选条件获取到我的GAS中进行其他操作。
谢谢。
是否有可能得到我的数据集的筛选条件。例如,如果我的一列是“部门”,我过滤数据只显示“IT”。我们如何获取筛选条件“IT”?我需要将这个筛选条件获取到我的GAS中进行其他操作。
谢谢。
function onOpen(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filterMenuEntries = [{name: "filter Column1", functionName: "filter"}];
ss.addMenu("choose filter", filterMenuEntries);
}
function filter(){
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
for (var i=1; i <=numRows -1; i++){
var row =values[i];
// Column value
var myValue = row[0];
// filter value
if (myValue == "XXX"){
sheet.hideRows(i+1);
}
}
}
A
1 Department
2 IT Department (Edinburgh)
3 Department of IT
4 Other Department
=FILTER(A:A;FIND("IT",A:A)>0)
如果您想完全在应用脚本中执行某些操作,Romain Vialard编写了一个带有过滤函数的托管库。以下是安装和使用2D Array2库的说明
随着高级表格服务的最新发布,现在可以使用筛选器:
以下是如何操作的简要说明:
这里有一篇文章
function setSheetBasicFilter(ssId, BasicFilterSettings) {
//requests is an array of batchrequests, here we only use setBasicFilter
var requests = [
{
"setBasicFilter": {
"filter": BasicFilterSettings
}
}
];
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
根据mhawksey的回答,我编写了以下函数:
//
function celdasOcultas(ssId, rangeA1) {
// limit what's returned from the API
var fields = "sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)";
var sheets = Sheets.Spreadsheets.get(ssId, {ranges: rangeA1, fields: fields}).sheets;
if (sheets) {
return sheets[0].data[0].rowMetadata;
}
}
然后这样调用:
// i.e. : ss = spreadsheet, ranges = "Hoja 2!A2:A16"
Logger.log(range.getA1Notation());
var ocultas = celdasOcultas(ss.getId(), sheetName + "!" + range.getA1Notation());
// Logger.log(ocultas);
var values = range.getValues();
for (var r = 0; r < values.length; r++) {
if (!ocultas[r].hiddenByFilter) {
values[r].forEach( function col(c){
Logger.log(c);
});
}
//range.setBackground("lightcoral");
}
避免记录隐藏行。您可以在以下位置查看此操作:
Script测试, 请注意,项目必须在Google API控制台上启用Google Sheets API。
希望对您有所帮助。谢谢!
这个问题在谷歌的问题跟踪器中被提出,链接为Issue #36753410。
截至2018-04-12,他们已经发布了一个解决方案:
昨天我们发布了一些新功能,使得使用 Apps Script 可以操作筛选器:这个最后的数组可以用于进一步操作工作表数据。为了展示脚本的效果,我让脚本将使用的单元格背景设置为绿色。
这对最终用户来说是额外的小努力,但在我看来,这是唯一使仅使用筛选数据成为可能的方法。
function getFilterdData(){
var s = SpreadsheetApp.getActive();
var sheet= s.getSheetByName('Opdrachten en aanvragen');//any sheet
var rows = new Array();
var colors = sheet.getRange(1, 6, sheet.getLastRow(), 1).getBackgrounds();
for(var i = 0; i < colors.length; i++){
if(colors[i] == "#ff0000"){
var rowsIndex = rows.length;
rows[rowsIndex] = i+1;
sheet.getRange(i+1, 6).setBackground("#d9ead3")
}
}
}