【问题标题】:How to add table heading drop-down with Apache Poi如何使用 Apache Poi 添加表格标题下拉菜单
【发布时间】:2015-09-14 21:37:53
【问题描述】:

我正在使用 Apache POI 生成 Excel 表格,但是当我在 Excel 本身中“格式化为表格”时,我生成的表格缺少每个标题上出现的下拉菜单。

我想生成这个:

但是我得到了这个:

我正在关注this blog post,我的代码如下所示:

        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);

我错过了什么?

【问题讨论】:

标签: java apache-poi


【解决方案1】:

感谢 Alan Hay 提供的线索 - 解决方案是添加一个自动过滤器,但这需要为 CTTable 的每个单独列添加为 CTAutoFilter。工作解决方案如下所示:

    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);
    }

【讨论】:

    【解决方案2】:

    从您引用的示例中并不清楚应用表格样式是否应该为您创建过滤器下拉列表。

    但是,您可以如下显式调用 setAutoFilter() 来设置过滤器下拉列表。

    例如

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

    【讨论】:

    • 这真的很接近工作 - 它生成正确的菜单,但 Excel 报告输出文件已损坏:“已删除功能:来自 /xl/tables/table1.xml 部分的表格(表格)”跨度>
    • 看来我剩下的问题是由这个未解决的问题描述的:stackoverflow.com/questions/25570731/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多