导出excel带图片

90 阅读2分钟

文章目录


前言

列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种


如何处理图片就是重点

一、根据图片路径转为图片

废话不多说,直接上代码
书接上文: 通用导出

	// 多个sheet
   for (Sheet sheet : writer.getSheets()) {
   		// 循环每一条数据处理找出图片路径
          for (int i = 0; i < commonDTO.getData().size(); i++) {
               Map<String, Object> dataMap = commonDTO.getData().get(i);
               // 包含图片路径
               if (dataMap.containsKey("imageUrl")) {
                   String imageUrl = dataMap.get("imageUrl").toString();
                   if (StrUtil.isBlank(imageUrl)) {
                       continue;// 不包含跳过
                   }
                   InputStream imageStream = new URL(imageUrl).openStream();
                   // 将图片转为字节数组
                   ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                   BufferedImage image = ImageIO.read(imageStream);
                   // JDK 导致图片有色差 改为用hutool
                   // ImageIO.write(image, "jpg", outputStream);
                   Img.from(image).write(outputStream);
                   byte[] bytes = outputStream.toByteArray();
                   Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
                   // 设置图片单元格位置
                   // 0, 0, 0, 0, 前四个0 不用管,就这么传递
                   // excel的第一个单元格 A-1 的起始坐标为 0,0 ; 结束坐标为 1,1
                   // 2, i + 2 : 可以理解为此为图片的第一个坐标,也就时图片的起始位置,2  x方向位置;
                   // 2, i + 2 : 可以理解为此为图片的第一个坐标,也就时图片的起始位置,i+2  y方向位置;
                   // 3, i + 3 : 可以理解为此为图片的第二个坐标,也就是图片的结束位置,3  x方向位置;
                   // 3, i + 3 : 可以理解为此为图片的第二个坐标,也就是图片的结束位置,i+3  y方向位置;
                   // 图片嘛 是一个四边形,确定一个规则四边形的位置,只需要两个坐标就够了,它这里是用左上角和右下角的两个坐标确定的
                   ClientAnchor anchor = drawingPatriarch.createAnchor(0, 0, 0, 0, 2, i + 2, 3, i + 3);
                   // 设置图片行的高度
                   writer.setRowHeight(i + 2, 80);
                   // 随单元格改变位置和大小
                   anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
                   // 添加图片
                   int pictureIndex = sheet.getWorkbook().addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
                   drawingPatriarch.createPicture(anchor, pictureIndex);
               }
           }
       }
    }

图片位置


总结

相信这个图片,一定可以让大家明白图片的坐标位置的概念了

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。