前景:由于项目需要使用到poi-tl的框架,但是poi-tl最低的要求是poi3.16以上版本,但是项目的poi使用的是3.13,太旧了,索性一次性升级到了4.01版本;
变更jar包的版本,或多或少都是会有一些冲突的,如下代码:
1.设置excel样式CellStyle相关的代码:
CellStyle titleCellStyle = workbook.createCellStyle();
titleCellStyle.setAlignment(CellStyle.ALIGN_CENTER);
titleCellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
titleCellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
titleCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
titleCellStyle.setBorderBottom(CellStyle.BORDER_THIN);
titleCellStyle.setBorderLeft(CellStyle.BORDER_THIN);
titleCellStyle.setBorderTop(CellStyle.BORDER_THIN);
titleCellStyle.setBorderRight(CellStyle.BORDER_THIN);
其中,CellStyle.ALIGN_CENTER,CellStyle.VERTICAL_CENTER,HSSFColor.GREY_25_PERCENT.index,CellStyle.SOLID_FOREGROUND,CellStyle.BORDER_THIN都会报错异常,应改为:
CellStyle titleCellStyle = workbook.createCellStyle();
titleCellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);//设置图案颜色
titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置图案样式
titleCellStyle.setBorderBottom(BorderStyle.THIN);//下边框
titleCellStyle.setBorderLeft(BorderStyle.THIN);//左边框
titleCellStyle.setBorderTop(BorderStyle.THIN);//上边框
titleCellStyle.setBorderRight(BorderStyle.THIN);//右边框
2.读取及操作excel单元格数据,对数据做类型判断时:
Cell.CELL_TYPE_STRING,HSSFCell.CELL_TYPE_NUMERIC,HSSFCell.CELL_TYPE_BOOLEAN,HSSFCell.CELL_TYPE_FORMULA,HSSFCell.CELL_TYPE_BLANK
都会提示不存在,应该成对应的CellType.STRING,CellType.NUMERIC,CellType.BOOLEAN,CellType.FORMULA,CellType.BLANK;
3.excel写入图片时:
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
try {
byteArrayOut.write(Base64.getDecoder().decode('图片base64的编码'));
// anchor主要用于设置图片的属性
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255, (short) i, rowNum + 1,
(short) i + 1, rowNum + 2);
anchor.setAnchorType(3);
// 插入图片
patriarch.createPicture(anchor,
workbook.addPicture(byteArrayOut.toByteArray(), ClientAnchor.MOVE_DONT_RESIZE));
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
代码中anchor.setAnchorType(3);,
ClientAnchor.MOVE_DONT_RESIZE,报错异常,应改为:
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
ClientAnchor.AnchorType.MOVE_DONT_RESIZE.value;
小结,poi版本问题产生报错汇总表(后续待补充)
poi3.+版本 | poi4.+版本 | 用途 |
---|---|---|
Cell.CELL_TYPE_STRING | CellType.STRING | 单元格数据格式判断 |
HSSFCell.CELL_TYPE_NUMERIC | CellType.NUMERIC | 单元格数据格式判断 |
CellStyle.ALIGN_CENTER | HorizontalAlignment.CENTER | 单元格水平居中 |
CellStyle.VERTICAL_CENTER | VerticalAlignment.CENTER | 单元格垂直居中 |
HSSFColor.GREY_25_PERCENT.index | IndexedColors.GREY_25_PERCENT.index | 设置图案颜色 |
CellStyle.SOLID_FOREGROUND | FillPatternType.SOLID_FOREGROUND | 设置图案样式 |
CellStyle.BORDER_THIN | BorderStyle.THIN | 边框 |
ClientAnchor.MOVE_DONT_RESIZE | ClientAnchor.AnchorType.MOVE_DONT_RESIZE.value | 单元格插入图片 |
以上是本次poi版本升级所遇到的冲突问题,如有小伙伴也遇到了相同的问题,可以联系小弟一起学习探讨;