poi版本升级(3.13到4.0.1)的那些坑_poi3升级到4.0兼容改造工作,_峻9527的博客-CSDN博客

前景:由于项目需要使用到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版本升级所遇到的冲突问题,如有小伙伴也遇到了相同的问题,可以联系小弟一起学习探讨;


原网址: 访问
创建于: 2023-05-06 16:00:29
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论