我一直在寻找,但目前还没有找到解决方案。
这个问题之前已经被问过,但是OP没有得到回复,我不想复活一个旧线程,因此决定提出一个新问题。 OP线程是here。
我遇到的问题是我有一个使用从数据库获取的数据创建的电子表格,但有时单元格内的数据可能会非常冗长,因此需要POI自动调整大小以保存用户必须执行的操作它,但是因为我在调用自动调整大小之前设置了自动过滤器,所以它不能正常工作。
我正在使用Apache POI 3.9。
我要么将其设置为自动调整但未考虑自动过滤器下拉箭头,或者我得到空指针异常。
我已尝试在整个地方移动for循环,包括在数据写入电子表格的末尾,以及文件输出流之前,但无效。
我也尝试过使用几种不同的字体,但这两种字体都没用。
希望有人可以帮助我。
由于
答案 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))