簡體   English   中英

如何使用Apache Poi添加表標題下拉列表

[英]How to add table heading drop-down with Apache Poi

我正在使用Apache POI生成Excel表格,但是我生成的表格缺少每個標題上的下拉菜單,當我在Excel中“格式化為表格”時出現。

我想生成這個:

表與菜單按鈕

但相反,我得到了這個:

沒有菜單按鈕的表

我正在關注這篇博文 ,我的代碼如下:

        XSSFTable table = sheet.createTable();
        table.setDisplayName("Data");
        CTTable ctTable = table.getCTTable();
        ctTable.setDisplayName("Data");
        ctTable.setId(1L);
        ctTable.setName("DATA");
        CTTableStyleInfo table_style = ctTable.addNewTableStyleInfo();
        table_style.setName("TableStyleMedium9");
        table_style.setShowColumnStripes(false);
        table_style.setShowRowStripes(true);

然后按如下方式創建每列:

            CTTableColumn column = ctColumns.addNewTableColumn();
            column.setName(headers.get(i));
            column.setId(i + 1);

我錯過了什么?

感謝Alan Hay提供的線索 - 解決方案是添加一個自動過濾器,但需要將其添加為CTAutoFilter的每個列的CTTable 工作解決方案如下所示:

    CTTableColumns ctColumns = ctTable.addNewTableColumns();
    CTAutoFilter autofilter = ctTable.addNewAutoFilter();
    ctColumns.setCount(table_headers.size());

    for(int i = 0; i < table_headers.size(); i++) {
        CTTableColumn column = ctColumns.addNewTableColumn();
        column.setName(table_headers.get(i));
        column.setId(i + 1);
        CTFilterColumn filter = autofilter.addNewFilterColumn();
        filter.setColId(i + 1);
        filter.setShowButton(true);
    }

在自動調整列大小時,還需要為下拉菜單添加額外的寬度:

    for(int i = 0; i < table_headers.size(); i++) {
        sheet.autoSizeColumn(i);
        // Include width of drop down button
        sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 1000);
    }

從您引用的示例中可以清楚地看出,應用表樣式是否應該為您創建過濾器下拉列表。

但是,您可以顯式調用setAutoFilter(),如下所示,以設置過濾器下拉列表。

例如

CellReference start = table.getStartCellReference();
CellReference end= table.getEndCellReference();
sheet.setAutoFilter(new CellRangeAddress(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM