简言:项目发现POI引入的包版本比较多,最终统一升级高版本,向下兼容程序,版本:3.15升级到5+版本。
踩坑:本来想一步到位升级到5.12版本,poi-ooxml-schemas包只支持到4.1.2版本到POI高版本删减了util对execl表格样式需要设置的同学注意兼容问题
- 数据类型:
Cell.CELL_TYPE_NUMERIC ==》转换为对应 CellType.NUMERIC
同样 类似的其他类型 如 CELL_TYPE_STRING 等等 CellType 都有对应
- 字体加粗
ont.setBoldweight(Font.BOLDWEIGHT_BOLD);
改为 font.setBold(true);
- 获取类型
cell.getCellTypeEnum() ==》改为 cell.getCellType()
- 边框线设定
原有的单线最细边框设置
代码:style.setBorderTop(BorderStyle.THIN);
CellStyle.BORDER_THIN ==》修改为 BorderStyle.THIN
至于其他边框粗细,点开BorderStyle 里面有描述
- 单元格内容 上下左右位置
ellStyle.VERTICAL_CENTER 垂直居中(上下居中) VerticalAlignment.CENTER
CellStyle.ALIGN_CENTER 左右居中 ==》更改为 HorizontalAlignment.CENTER
同样类似的偏左以及偏右 替换成对应的LEFT 或者 RIGHT 即可
- 删减部分
org.apache.commons.collections4.CollectionUtils //工具类拿掉了
- 表格颜色
font.setColor(HSSFColor.BROWN.index) ==》变更后font.setColor(HSSFColor.HSSFColorPredefined.BROWN.getIndex())
- 兼容异常
1.依赖包异常:java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
原因:版本在5.1.0的时候导出EXECL会出错,报加载不到当前类
解决方法:
1.降低版本号
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
或是升级依赖包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
- 如果有使用jxls 2+版本的同学此时代码是不兼容高版本的poi版本,可以使用jxls
-------老版本-----------
**jxls-core在14年后就不在更新,所以对新版本的poi是不支持的**
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<jxls.version>1.0.5</jxls.version>
</dependency>
-------新版本-----------
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>${jxls.version}</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>${jxls.version}</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>${jxls-jexcel.version}</version>
</dependency>