2014-09-23 21 views
0

我有一個腳本,它從Google表中獲取所有數據並將其顯示在表中。我在其中包含了幾個類別過濾器,以便用戶能夠選擇他們想要查看的數據。設置要預過濾的Charts.newCategoryFilter()

但是,我現在正在考慮進一步對我的列進行預過濾,以便它只顯示「已關閉」的結果。然後,我將創建該文件的一個副本,並將其更改爲僅顯示「打開」結果。

這可能嗎?請參閱下面我的腳本的簡化版本。作爲參考,這是我想要預過濾的結果過濾器。

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腳本。

編輯 -我已經成功地讓自己一個解決辦法,我在那裏創建兩個表,一個被配製只顯示「關閉」項,另一種被配製只顯示「打開」條目。然後,我創建了一個快速的應用程序腳本,對顯示的記錄Z-A進行排序。

它的工作原理是一個很好的解決方法,但令人討厭的是每次我想犯一個錯誤,我都需要更新兩個文件。 - 編輯

回答

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. 
    }; 
}; 
+0

我想這換到別的價值今天以各種格式,主要使用第二種選擇。我的代碼在這裏結束爲: for(var j in data [0]){ if(data [23] [j]!=「Closed」){//我也嘗試創建一個新的var並將其定義爲「關閉」。 //其餘代碼 }; }; 但是,這並不對濾鏡執行任何操作。 – kjexley 2014-09-24 13:55:48

+0

我們需要確切知道哪行代碼無法正常工作。查看**執行轉錄**;使用Logger.log('一些變量名:'+ varName);'然後查看日誌。使用調試器來遍歷代碼。您可以使用您嘗試的任何新代碼更新您的問題。告訴我們爲特定變量返回的內容。發佈您收到的錯誤消息。 – 2014-09-24 14:06:59

+0

我已經更新了第8行和第44行的更改原始問題。當我像這樣運行時,實際上並沒有發生錯誤。它只是顯示'打開'和'關閉'條目 – kjexley 2014-09-24 15:18:34

0

您可以創建一個過濾器,將有預設值「關閉」,並無法使用

var testFilter = Charts.newCategoryFilter().setAllowNone(false).setValues(['Closed']); 
+0

我剛剛嘗試添加,以及所有filterPanels等與它一起去,但我得到以下錯誤,當我去運行它:「不能將數組轉換爲Control []「。 – kjexley 2014-11-13 17:26:22

+0

我只是加倍檢查,它確實爲我工作,當我把它放入其他舊腳本。你能創建一個公共的模擬數據電子表格嗎? – Lukasz 2014-11-14 12:41:07