poi 在赋值之后autoSizeColumn,autoSizeColumn失效
情况说明:java代码完全一致,本地(windows),测试环境(linux)都ok,到生产(linux)就出现autoSizeColumn之后列宽混乱的情况。问题分析:首先代码是在cell.setCellValue(“XXX”)之后sheet.autoSizeColumn(i),所以判除这种情况。并且有2个环境是ok的,所以不是代码问题,应该是环境问题。查到资料说字体不存在会报错,但我这边没有报
情况说明:
java代码完全一致,本地(windows),测试环境(linux)都ok,到生产(linux)就出现autoSizeColumn之后列宽混乱的情况。
代码:
cell.setCellValue("XXX");
sheet.autoSizeColumn(i);
int colWidth = sheet.getColumnWidth(i) * 2;
sheet.setColumnWidth(i, colWidth < 3000 ? 3000 : colWidth);
问题分析:
首先代码是在cell.setCellValue(“XXX”)之后sheet.autoSizeColumn(i),所以排除autoSizeColumn之后setCellValue的的情况。
其次有2个环境是ok的,所以不是代码问题,应该是环境问题。
查到资料说字体不存在会报错,我这边没有报错异常,但可能是字体问题。
之后网上查到:这是一个字体问题。原作者找到的唯一字体是Serif。我这边也没具体测试过,无法做结论。
然后去比对了发现生产环境字体库的确缺失。我这边设置的字体是Arial,但是本地、测试、生产都没有该字体,我就只能把字体全部复制过去。
处理过程
首先查询安装字体
[root@XXX ~]# fc-list
/usr/share/fonts/ucs-miscfixed/6x12.bdf: Fixed:style=SemiCondensed
..
..
..
/usr/share/fonts/lohit-bengali/Lohit-Bengali.ttf: Lohit Bengali:style=Regular
把测试环境/usr/share/fonts/这部分字体拷贝到生产环境上
PS:
查看字体配置文件有没有对应文件的路径,没有自行修改下即可
[root@XXX ~]# cat /etc/fonts/fonts.conf
...
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
...
查看中文字体
[root@XXX ~]# fc-list :lang=zh
然后复制文件到目标
将/root/fonts/下的所有文件复制到/usr/share/fonts下面
接着查看了下,的确进去了
[root@XXX ~]# cp -r /root/fonts/* /usr/share/fonts
[root@XXX ~]# fc-list
PS:
如果改过fonts.conf文件记得刷新下缓存
[root@XXX ~]# fc-cache fv
最后java应用需要重启
ok,搞定了。
性能优化
autoSizeColumn数据量大存在性能问题,可以参考下面的文章优化。
https://blog.csdn.net/Demo_Liu/article/details/97375317
更多推荐
所有评论(0)