今天开发一个功能,用poi导出一份财务相关的报表,其中有过个sheet页,每个sheet页中的每一行都要动态设置单元格格式,代码如下:
Workbook wb = new HSSFWorkbook(); DataFormat df = wb.createDataFormat(); CellStyle cellStyle = wb.createCellStyle(); String format = "动态格式"; cellStyle.setDataFormat(df.getFormat(format));
excel文档的sheet页很多,而且每行都要设置单元格格式,最后导出excel文档后,用office打开部分格式未生效,诡异的是,用wps打开格式是正常的。
最后定位到问题的原因:
exce文档的sheet页很多,而且每行都要设置单元格格式,所以在遍历每一行数据的时候都要创建一个CellStyle,导致一份excel文档保存了大量的CellStyle,而office支持excel中单元格格式数量有限,如果创建太多的话会出现有些格式是不能显示的。
解决方案:
我发现好多行的单元格格式都是重复的,去重后才不到10种格式,解决办法是创建一个map类型的变量,key存储每一行的唯一标记,value存储单元格式,这样相同格式的行引用的都是同一个CellStyle,避免了创建太多的CellStyle,问题完美解决:)。