2015-11-30 61 views
1

我想使用Apache POI在Excel工作表中的多個位置創建自動篩選器。 (例如,在第8行的第2行&)。如何使用Apache POI在不同行創建多個自動篩選器

hssfSheet.setAutoFilter(new CellRangeAddress(2, 4, 6, 3)); 
hssfSheet.setAutoFilter(new CellRangeAddress(8, 5, 3, 5)); 

我已經加入像上述提及但第二濾波器被重寫的第一個,並創建Excel表單時,我只能看到一個。 有人可以幫助我嗎。

enter image description here

感謝。

+1

Excel工作表只能有每片1個濾波器範圍。該過濾器範圍可以過濾多個項目。 –

+0

但從Microsoft Excel的GUI我可以在多行創建過濾器。這是否像apache POI允許每個工作表只創建一個過濾器? –

+1

您是否在嘗試過濾多個條件的數據集?或者在工作表內的不同數據集上放置多個過濾器? –

回答

1

使用應使用XSSFSheet並創建CTTable。工作表可能包含很多表格。

這是用於將表格添加到工作表的代碼。請確保單元格已創建並存在。 AreaReference的

private void createExcelTable(XSSFSheet sheet, AreaReference reference, int tableId, 
String name) { 
    XSSFTable table = sheet.createTable(); 
    table.setDisplayName(name); 
    CTTable cttable = table.getCTTable(); 

    // Style configurations 
    // CTTableStyleInfo is available in ooxml-schemas-1.1.jar. 
    // Replace with it your poi-ooxml. 
    CTTableStyleInfo style = cttable.addNewTableStyleInfo(); 
    style.setName("TableStyleLight1"); 
    style.setShowColumnStripes(false); 
    style.setShowRowStripes(true); 

    // Set which area the table should be placed in 
    cttable.setRef(reference.formatAsString()); 
    // id starts from 1 
    cttable.setId(tableId); 
    cttable.setName(name); 
    cttable.setDisplayName(name); 

    // first row is used for header with filter 
    CTAutoFilter autoFilter = cttable.addNewAutoFilter(); 
    autoFilter.setRef(reference.formatAsString()); 

    CTTableColumns columns = cttable.addNewTableColumns(); 
    // sets count of columns for current table 
    short firstColumn = reference.getFirstCell().getCol(); 
    short lastColumn = reference.getLastCell().getCol(); 
    columns.setCount(lastColumn - firstColumn + 1); 

    for (int i = firstColumn; i <= lastColumn; i++) { 
     // create columns 
     CTTableColumn column = columns.addNewTableColumn(); 
     column.setName("Column" + i); 
     // id starts from 1 
     column.setId(i + 1); 
    } 
} 

實施例:

new AreaReference(new CellReference(0, 0), new CellReference(4, 5)); 
+0

謝謝@Daniil。有效。但是我如何在HSSFSheet中使用它? –

+0

@TruptiKanase:我沒有用過很多hssf,請檢查[poi示例頁面](https://poi.apache.org/spreadsheet/examples.html) – dlopatin

+0

好的。謝謝。我已經看過apache POI的API,但沒有得到任何解決方案。 –

相關問題