将Charts.newCategoryFilter()设置为预过滤

时间:2014-09-23 11:03:15

标签: google-apps-script

我有一个脚本,它从Google表格中获取所有数据并将其显示在表格中。我已经在其中包含了几个类别过滤器,以便用户可以选择他们想要查看的数据。

但是,我现在希望更进一步地对我的一个列进行预过滤,以便它只显示"已关闭"的结果。然后,我会创建此文件的副本,并将其更改为仅显示"打开"结果

这可能吗?请参阅下面的我的脚本的简化版本。作为参考,它是我想要预过滤的结果过滤器。

 function doGet() {

   var ss = SpreadsheetApp.openById('spreadsheetkey');
   var sheet = ss.getSheetByName('Sheet1')
   var data = sheet.getDataRange().getValues();
   var dataTable = Charts.newDataTable();
 for( var j in data[0] )
   if (data[23][j] != 'Closed') {
   dataTable.addColumn(Charts.ColumnType.STRING, data[0][j]);
 for( var i = 1; i < data.length; ++i )
   dataTable.addRow(data[i].map(String));


   var stageFilter = Charts.newCategoryFilter().setFilterColumnIndex(21).build();
   var outcomeFilter = Charts.newCategoryFilter().setFilterColumnIndex(23).build();
   //var testFilter = Charts.newCategoryFilter().setFilterColumnIndex(24).build();
   //var testFilter2 = Charts.newCategoryFilter().setFilterColumnIndex(25).build();

   var tableChart = Charts.newTableChart()
   .setDimensions(1900, 2000)
   .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0,1,2,3,4,5,6,7,8,9,10,11/*,12*/,14,15,16,17,18,19,20,21,22,23]))
   .build()
   ;

   var dashboard = Charts.newDashboardPanel().setDataTable(dataTable)
   .bind([stageFilter, outcomeFilter/*, testFilter, testFilter2*/],[tableChart])
   .build();

   var app = UiApp.createApplication();
   var filterPanel1 = app.createHorizontalPanel();
   var filterPanel2 = app.createHorizontalPanel();
   var filterPanel3 = app.createHorizontalPanel();
   var filterPanel4 = app.createHorizontalPanel();
   //var testPanel = app.createHorizontalPanel();
   var chartPanel = app.createHorizontalPanel();

   filterPanel4.add(stageFilter).add(outcomeFilter).setSpacing(10);
   //testPanel.add(testFilter).add(testFilter2).setSpacing(10);
   chartPanel.add(tableChart).setSpacing(10);

   dashboard.add(app.createVerticalPanel().add(filterPanel1).add(filterPanel2).add(filterPanel3).add(filterPanel4)/*.add(testPanel)*/.add(chartPanel));
   app.add(dashboard);
   return app;
 }
 }

这是我的脚本绝对不容易尝试减少问题的大小。

我也知道我可能没有以最好的方式处理我的代码,但我仍然习惯使用Apps脚本。

编辑 - 我设法让自己成为一种解决方法,在那里我创建了两张纸,其中一张是为了显示&#34;已关闭&#34;条目和另一个被制定为仅显示&#34; Open&#34;条目。然后我创建了一个快速应用程序脚本,对显示的记录Z-A进行排序。

它有效并且是一个很好的解决方法,但是每次我想犯错误时我都需要更新两个文件,这很烦人。 - 编辑

2 个答案:

答案 0 :(得分:0)

在获取数据之前,您可以按要从中排除值的列对数据进行排序。

Google Documentation Sort a Sheet Range

您已经有一个For循环遍历数据的每一行,因此您可以添加一个条件,以便在达到您不想要的值时停止循环。

for (var j in data[0] ) {
  if (data[columnYouWantToCheck][j] === valueToExclude) {
    break; //End this iteration here if row is unwanted.  If you sorted the data.
  };
};

break;将终止循环,因此只有在您预先排序数据时才使用它。您还可以设置如下条件:

for (var j in data[0] ) {
  if (data[columnYouWantToCheck][j] != valueToExclude) {
    //All your code here for data in include.
  };
};

答案 1 :(得分:0)

您可以创建一个默认情况下具有值&#34;已关闭&#34;并且无法使用

更改为其他值
var testFilter = Charts.newCategoryFilter().setAllowNone(false).setValues(['Closed']);