在项目上利用POI将数据传入Excel中发现的问题,记录一下
语句如下
byte[] bytes=JsonUils.getFileBytes(list2.get(n));
Drawing drawing = sheet.createDrawingPatriarch();
HSSFClientAnchor hssfClientAnchor=new HSSFClientAnchor(0,0,0,0,(short) (size2+n),i+n,(short) (size2+(1+n)),i + (n+1));
drawing.createPicture(hssfClientAnchor,wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG));
当执行时发现到drawing.createPicture(hssfClientAnchor,wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG));这个会直接跳出函数,就算设置了异常点也不会打印。通过debug的查找发现有问题的点是在wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG)中,一开始我以为是bytes的数据有问题,但通过测试bytes是可以重新生成图片显示的,也怀疑是权限问题,但都不是,直到debug进去addPicture这个方法
public int addPicture(byte[] pictureData,int format) {
this.initDrawings();
byte[] uid = DigestUtils.md5(pictureData);
EscherBitmapBlip blipRecord =new EscherBitmapBlip();
blipRecord.setRecordId((short)(-4072 + format));
....
}
发现在addPicture方法中执行到byte[] uid = DigestUtils.md5(pictureData);这条数据就回跳出函数,点击DigestUtils想查看源码,但没有这样类的信息,后发现DigestUtils这个类是Apache Commons Codec库的,把依赖放入进去再次编译就可以执行了,没有出现问题了
依赖:
implementation'commons-codec:commons-codec:1.15'