当前位置: 首页 > 知识库问答 >
问题:

如何使用Apache Poi添加表格标题下拉列表

归鹤龄
2023-03-14

我正在用ApachePOI生成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);

我错过了什么?

共有2个答案

范哲
2023-03-14

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

但是,您可以在下面显式地调用setAutoFilter()来设置筛选器下拉列表。

例如

CellReference start = table.getStartCellReference();
CellReference end= table.getEndCellReference();
sheet.setAutoFilter(new CellRangeAddress(...);
丁俊爽
2023-03-14

感谢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);
    }
 类似资料:
  • 鉴于下面的剑道下拉列表,我想在optionLabel select上添加一个类,这样当ddl扩展时,我可以直观地区分什么是选项标签,什么是选项。理想情况下,这应该从完成,而且显然必须从js完成。我正在寻找一个奇特的解决方案,我真的不想遍历大部分DOM。 http://trykendoui.telerik.com/@vojtiik/uLEc

  • 页面上有两个下拉菜单。 当我点击第一个下拉菜单时,在第二个下拉菜单选项将在几秒钟后自动加载。 这是我的问题,我怎么能等待第二个下拉列表完全加载硒网络驱动程序。 注意:这是 div 下拉列表 xpath的第二个下拉列表: 我正在使用C#谢谢

  • 问题内容: 我有一个这样的SQL选择语句: 这将为我返回类似表格的内容: 我想要的是将列标题插入第一行,例如: 有人可以建议如何实现吗? 您能否用标题创建一个临时表并将数据附加到此表? 问题答案: 除非您的所有名字都按排序顺序在“ first”之后,否则上述两个答案都不会起作用。 如果您也想对所有非varchar列执行此操作,则CONS(至少)为: 您所有的数据都将成为VARCHAR。例如,如果您

  • 类似 (https://visactor.io/vchart/demo/line-chart/basic-line)这样的折线图, 我希望给图表上方添加标题描述,该如何配置?

  • 问题内容: 我正在JSP中创建一个页面,其中有一个下拉列表,一旦用户选择了一个值,他就必须单击go按钮,然后将该值发送到Servlet。 我该如何做才能在变更时做到呢?例如,当用户选择John时,将从数据库中检索出他的所有详细信息并显示出来。我希望系统无需单击“执行”按钮即可执行此操作。 问题答案: 只需询问JavaScript的帮助。

  • 我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。 我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。 JS(Coffeescript)代码段: 最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug): 在本例中,儿童