poi 在赋值之后autoSizeColumn,autoSizeColumn失效

情况说明:

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 HSSF(Horrible Spreadsheet Format)中为下拉列表赋值,可以使用 HSSFDataValidation 类的 setExplicitListValues() 方法来实现。以下是一个简单的示例代码: ``` HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建下拉列表约束 String[] items = {"Item 1", "Item 2", "Item 3"}; DVConstraint constraint = DVConstraint.createExplicitListConstraint(items); // 创建数据验证对象并设置类型为下拉列表 CellRangeAddressList range = new CellRangeAddressList(0, 0, 0, 0); HSSFDataValidation validation = new HSSFDataValidation(range, constraint); validation.setSuppressDropDownArrow(false); // 将数据验证对象添加到工作表中 sheet.addValidationData(validation); // 应用数据验证到单元格 Cell cell = sheet.createRow(0).createCell(0); cell.setCellValue("Item 2"); // 设置下拉列表默认值为 Item 2 HSSFCellStyle style = workbook.createCellStyle(); style.setDataValidation(validation); cell.setCellStyle(style); // 保存工作簿 FileOutputStream outputStream = new FileOutputStream("workbook.xls"); workbook.write(outputStream); outputStream.close(); ``` 在上述示例代码中,我们通过 setExplicitListValues() 方法为下拉列表赋值,将默认值设置为 "Item 2"。 注意:在为下拉列表赋值之前,必须先创建下拉列表约束和数据验证对象。同时,赋值的内容必须与下拉列表约束中的选项一致,否则会出现数据验证失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值