这个时候没办法, 只能自己设置列宽了, 现在网上找到的设置列宽的方法有以下几个:
1.自适应列宽度:
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(1, true);
这两种方式都是自适应列宽度,但是注意这个方法在后边的版本才提供,poi的版本不要太老。
注意:第一个方法在合并单元格的的单元格并不好使,必须用第二个方法。
经过测试,这种自适应的api在遇到行数多一点的数据的时候,就会耗费大量的时间,1000行花了2分钟!!!所以尽量不要用
sheet.trackAllColumnsForAutoSizing();
sheet.autoSizeColumn(i);
而且这两个方法对英文数字还好, 对中文支持的并不好:
2.用数组将大概的宽度设置好,手动set宽度
int[] width = {xxx,xxx};
for循环
sheet.setColumnWidth(i,width[i]);
3.自己根据一列数据中的最长的字符串长度设置宽度
所以还是得自己费心费力去diy :
判断这一列的最长字符串,然后
int length = str.getBytes().length;
sheet.setColumnWidth((short)列数,(short)(length*256));
这里经过我反复尝试,我个人觉得把最大宽度限制在10000到15000左右是比较合适的, 然后剩下的就交给excel的自动换行。这里推荐公众号Java精选,回复Java面试,获取最新最全面试题资料,支持在线随时随地刷题。
像我这里有很多行的数据, 不知道哪一行的内容最长, 这里简单提供两种思路(方法是很多的, 能达到目的就行):
-
用一个
Map<Integer, List>
, key是指具体哪一列, List中放的是每行的这一列的内容的长度 , 每遍历一行的一列, 就map.put(i, list.add(length))
, 然后用Collections.max(map