java - Apache POI,自动过滤后调用自动调整大小

标签 java excel apache-poi autosize autofilter

我已经搜索了一段时间,但还没有找到解决方案。

这个问题之前已经在这里问过,但是 OP 没有得到回应,我不想复活一个旧线程,所以决定问一个新问题。 OP线程是here .

我遇到的问题是我有一个电子表格,该电子表格是使用从数据库中获取的数据创建的,但是有时单元格中的数据可能会很长,因此希望 POI 自动调整大小以节省用户的工作量它,但因为我在调用自动​​调整大小之前设置了自动过滤器,所以它不太有效。

我正在使用 Apache POI 3.9。

我要么将其设置为自动调整大小但未考虑自动过滤器下拉箭头,要么出现空指针异常。

我试过在所有地方移动 for 循环,包括将数据写入电子表格的末尾,以及文件输出流之前,但都无济于事。

我也尝试过使用几种不同的字体,但都没有用。

希望有人能帮助我。

谢谢

最佳答案

我是您提到的原始主题的作者。最后我找到了一个解决方案,不是我一直在寻找的解决方案,但至少它对我有用。我只是忘了用找到的解决方案更新我的问题。

我创建了一个新方法,它遍历我想要自动调整大小的工作表的列,并做了两件事。首先,我自动调整列的大小,这样我们就会得到不需要的宽度,因为它没有考虑箭头的宽度。然后我手动设置列的宽度,包括箭头的宽度。我不得不玩一点来找到箭头的宽度(对我来说是 1300)。我想这个宽度适合你,但你可以随意设置它。

如您所想,您应该首先获取并自动过滤数据。之后你调用一个方法来自动调整列的大小,就像我使用的那样:

private static final int WIDTH_ARROW_BUTTON = 1300;

private void autosizeColumnsFromSheet(final Sheet excelSheet, final int fromColumn, final int toColumn) {
        for (int i = fromColumn; i <= toColumn; i++) {
            excelSheet.autoSizeColumn(i);
            try {
                excelSheet.setColumnWidth(i, excelSheet.getColumnWidth(i) + WIDTH_ARROW_BUTTON);
            } catch (final Exception e) {
                // don't do anything - just let autosize handle it
            }
        }
    }

关于java - Apache POI,自动过滤后调用自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17572879/

相关文章:

java - 我们如何在 PutObjectRequest 中传递 header 来上传 S3 存储桶

excel - if语句在满足条件时不改变颜色

javascript - html 表格导出到 Excel 边框未显示在 Excel 工作表中

java - 在Word中添加BORDURE页面,由maven项目中的apache poi生成

java - Axis2 Web 服务和 Eclipse WSDL 创作 : Adding an axis fault to wsdl causes exception when running wsdl2java

java - Collection <?扩展 T> 意味着?

java - 如何将代码生成从 xpand 迁移到 xtend(2)?

Python openpyxl 在修改现有文件时丢失超链接

excel - 如何使用 POI 在 Excel 中设置公式?

java - 尽管我添加了正确的 Apache POI .jar 文件,Eclipse 仍抛出 ClassNotFoundException?