是否有可能让我的数据集的筛选条件。 例如,如果我的专栏之一是“部门”和我过滤数据,只显示“IT”。 我们如何得到过滤条件,“IT”。 我需要的是过滤标准到我的气,做一些其他的操作。
谢谢。
是否有可能让我的数据集的筛选条件。 例如,如果我的专栏之一是“部门”和我过滤数据,只显示“IT”。 我们如何得到过滤条件,“IT”。 我需要的是过滤标准到我的气,做一些其他的操作。
谢谢。
尝试这个例子一个简单的过滤器。 它会过滤信息(变化XXX为有意义)从第一列:
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)
( 工作实例这里 )
如果你想在Google Apps脚本罗曼Vialard完全做一些事情写了一管库具有过滤功能。 下面是安装和使用二维数组2库指令
过滤器现在可以使用与近期推出的高级床单服务:这里是给一个链接的文章
下面是如何做一个小小的片段:
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);
}
在寻找一个回答这个问题,我想出了下一个解决方法:
这最后一个阵列可被用于将片数据的进一步的操作。 要vivualize脚本的效果,我做了剧本设定中使用的细胞的绿色背景。
这是一个额外的小努力,为最终用户做出,但恕我直言这使它可以只使用过滤后的数据的唯一途径。
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")
}
}
}
基于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; } }
然后叫这样说:
// ie : 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"); }
不是防止隐藏的行的日志。 你可以看到它在行动: Prueba脚本 ,注意项目必须得到谷歌API控制台启用谷歌表API。
希望能帮助到你。 谢谢!
这在谷歌的问题跟踪器作为提出的问题#36753410 。
截至2018年4月12日 ,他们已经发布了一个解决方案:
昨天我们发布了一些新的功能,使得它可以操纵Apps脚本过滤器:
- https://developers.google.com/apps-script/reference/spreadsheet/range#createFilter()
- https://developers.google.com/apps-script/reference/spreadsheet/sheet#getfilter
- https://developers.google.com/apps-script/reference/spreadsheet/filter
不幸的是Google Apps脚本还没有确定,如果给定的行或列被过滤器隐藏的方法。 见注释#157为利用床单高级服务解决方法。
该过滤器类,您可以得到FilterCriteria依次对于每一列。