【112期】POI 导出 excel:设置字体、颜色、行高与列宽自适应

这个时候没办法, 只能自己设置列宽了, 现在网上找到的设置列宽的方法有以下几个:

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面试,获取最新最全面试题资料,支持在线随时随地刷题。

像我这里有很多行的数据, 不知道哪一行的内容最长, 这里简单提供两种思路(方法是很多的, 能达到目的就行):

  1. 用一个Map<Integer, List>, key是指具体哪一列, List中放的是每行的这一列的内容的长度 , 每遍历一行的一列, 就map.put(i, list.add(length)), 然后用Collections.max(map

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值