我有一个脚本,它从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进行排序。
它有效并且是一个很好的解决方法,但是每次我想犯错误时我都需要更新两个文件,这很烦人。 - 编辑
答案 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']);