导出excel时在需要导出图片的地方都调用一下以下方法,原本的excel数据导出代码不用动,只需根据需求调用一次该方法即可,比如每行都需要带一张图片,那就可以导出行数据的最后调用该方法
/**
* excel生成图片工具
* @param sheet excel表
* @param rowLen 图片插入的行号
* @param colsLen 图片插入的列号
*/
public void generateImages(String imgSrc, XSSFSheet sheet, int rowLen, int colsLen){
if(StringUtils.isNotBlank(imgSrc)) return;
BufferedImage bufferImg = null;
ByteArrayOutputStream byteArrayOut = null;
try {
URL url = new URL(imgSrc);
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
byteArrayOut = new ByteArrayOutputStream();
//将图片读到BufferedImage
bufferImg = ImageIO.read(url);
if(bufferImg != null){
ImageIO.write(bufferImg, "png", byteArrayOut); // 将图片写入流中
}
if(byteArrayOut != null && byteArrayOut.size() > 0){
int pictureIdx = workbook.addPicture(byteArrayOut.toByteArray(), Workbook.PICTURE_TYPE_JPEG);
XSSFDrawing drawing = sheet.createDrawingPatriarch();
//后面四个参数是控制图片在表格中的位置,具体自己调试看看
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, colsLen + i + 1, rowLen + 1, colsLen + i + 2, rowLen + 2);
drawing.createPicture(anchor,pictureIdx);
}
byteArrayOut.reset();
} catch (IOException e) {
log.error("可能读取图片的时候出错了!" + e.getMessage());
e.printStackTrace();
}
}
}
参考文章
springboot导出带图片excel文件,(.xls格式)
HSSF和XSSF类型的Excel分别怎么导出图片到Excel