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

时间:2013-07-10 14:10:04

标签: java excel apache-poi autosize autofilter

我一直在寻找,但目前还没有找到解决方案。

这个问题之前已经被问过,但是OP没有得到回复,我不想复活一个旧线程,因此决定提出一个新问题。 OP线程是here

我遇到的问题是我有一个使用从数据库获取的数据创建的电子表格,但有时单元格内的数据可能会非常冗长,因此需要POI自动调整大小以保存用户必须执行的操作它,但是因为我在调用自动​​调整大小之前设置了自动过滤器,所以它不能正常工作。

我正在使用Apache POI 3.9。

我要么将其设置为自动调整但未考虑自动过滤器下拉箭头,或者我得到空指针异常。

我已尝试在整个地方移动for循环,包括在数据写入电子表格的末尾,以及文件输出流之前,但无效。

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

希望有人可以帮助我。

由于

3 个答案:

答案 0 :(得分:11)

我是那个写了你提到的原始帖子的人。最后我找到了一个解决方案,而不是我想要的解决方案,但至少它对我有用。我忘了用我找到的解决方案更新我的问题。

我创建了一个新方法,它迭代我要自动调整的工作表的列并执行两项操作。首先我自动调整列,这样我们就会得到我们不想要的宽度,因为它没有考虑箭头的宽度。然后我手动设置列的宽度,包括箭头的宽度。我不得不玩一点才能找到箭头的宽度(对我而言是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(new Short(String.valueOf(i)));
            try {
                excelSheet.setColumnWidth(i, excelSheet.getColumnWidth(i) + WIDTH_ARROW_BUTTON);
            } catch (final Exception e) {
                // don't do anything - just let autosize handle it
            }
        }
    }

答案 1 :(得分:3)

根据我的理解,您选择的过滤器下拉列表文本因箭头而隐藏。如果我是对的,为什么不在自动调整后给出一些填充!我的意思是首先通过以下方式自动调整col:

testSheet.autoSizeColumn(ColIndex);

然后计算列宽并在宽度

中添加一些所需的填充
testSheet.setColumnWidth(ColIndex ,testSheet.getColumnWidth(ColIndex)+PaddingWidth);

这将为下拉菜单右侧的箭头图标提供足够的填充,文本将完全显示。

答案 2 :(得分:1)

f(0, 0) = 1
f(i, j) = SUM(k = 0 to min(V_j, i), f(i - k, j - 1))