谷歌应用程序脚本/电子表格 - 如何获得过滤条件?(Google App Script / Spre

2019-06-26 12:59发布

是否有可能让我的数据集的筛选条件。 例如,如果我的专栏之一是“部门”和我过滤数据,只显示“IT”。 我们如何得到过滤条件,“IT”。 我需要的是过滤标准到我的气,做一些其他的操作。

谢谢。

Answer 1:

尝试这个例子一个简单的过滤器。 它会过滤信息(变化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);

     }

  }

}


Answer 2:

谷歌电子表格已经有一个过滤器惯例( 我一直使用此页面来提醒我如何做到这一点 )。 因此,举例来说,如果你的数据看起来像这样

  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库指令



Answer 3:

过滤器现在可以使用与近期推出的高级床单服务:这里是给一个链接的文章

下面是如何做一个小小的片段:

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);
}


Answer 4:

在寻找一个回答这个问题,我想出了下一个解决方法:

  • 在片材应用过滤器;
  • 着色滤波(因此可见)细胞(在列F中的示例代码红色);
  • 运行脚本:
    • 在阵列的颜色读数的背景色(柱F)
    • 迭代该数组
    • 建立是可见的行数的新阵列。

这最后一个阵列可被用于将片数据的进一步的操作。 要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")
         }
       }
    }


Answer 5:

基于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。

希望能帮助到你。 谢谢!



Answer 6:

这在谷歌的问题跟踪器作为提出的问题#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依次对于每一列。



文章来源: Google App Script / Spreadsheet - How to get filter criteria?