Chr*_*ris 5 java excel autofilter autosize apache-poi
我一直在寻找,但还没有找到解决方案.
这个问题之前已经被问过,但是OP没有得到回复,我不想复活一个旧线程,因此决定提出一个新问题.OP线程就在这里.
我遇到的问题是我有一个电子表格,它是用从数据库中获取的数据创建的,但是有时候单元格中的数据可能会非常冗长,所以要求POI自动调整以保存用户必须这样做,但是因为我在调用自动调整大小之前设置自动过滤器,所以它不太有用.
我正在使用Apache POI 3.9.
我要么让它达到自动调整的程度,但没有考虑自动过滤器下拉箭头,或者我得到一个空指针异常.
我已经尝试在整个地方移动for循环,包括在数据写入电子表格的末尾,以及文件输出流之前,但无济于事.
我也试过使用几种不同的字体,但这也没有用.
希望有人可以帮助我.
谢谢
Car*_*tor 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,您选择的过滤器下拉列表文本由于箭头而隐藏。如果我是对的,为什么不在自动调整大小后给一些填充呢!我的意思是首先通过以下方式自动调整列大小:
testSheet.autoSizeColumn(ColIndex);
Run Code Online (Sandbox Code Playgroud)
然后计算列宽并在宽度中添加一些所需的填充
testSheet.setColumnWidth(ColIndex ,testSheet.getColumnWidth(ColIndex)+PaddingWidth);
Run Code Online (Sandbox Code Playgroud)
这将为下拉列表右侧的箭头图标提供足够的填充,并且文本将完全显示。
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |