绝了,hutool导出excel 图片居然没有调用方法

业余草

共 2414字,需浏览 5分钟

 · 2022-09-17

你知道的越多,不知道的就越多,业余的像一棵小草!

你来,我们一起精进!你不来,我和你的竞争对手一起精进!

编辑:业余草

juejin.cn/post/7132050134426189832
推荐:https://www.xttblog.com/?p=5357
自律才能自由

最近同事在做 excel 导出文件,然后有一列是图片展示,然后我们图片搞了防盗链,如果直接点开链接,就是一个默认图片(无法展示),我们就想着把图片嵌入 excel 中展示,由于我们框架用的是 hutool 去导出,同事说做不了。然后我点开里面各种类,结果都没有 img 的输入 excel 的方法,气死我了!

气死我了

骚操作

其实我也是一个 cv 工程师,百度找找有没有大佬已经实现这功能,然后就找到了,不是 hutool 里面的方法,是 poi 包下。

有轮子先用轮子,没有轮子再造轮子。

上操作

「输出excel数据代码」

//写入数据
writer.write(xx, true);

「导出类」

xx 是 List,我们看下 bo 类,我们定义一个不存在的字段,方便塞入图片列。

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class BO {

    private String pic;
    
    private String url;

}

这个类里头有个 url 链接字段,pic  是图片展示的列,url我们是不展示的,所以需要加上下面这段代码,就是如果这个字段跟 excel 列不匹配(不展示)的时候,就不展示出来,不然会展示列名为 url。

writer.setOnlyAlias(true);

「输出图片」

好家伙,在输出数据之后,还要特殊处理excel

for (int i = 0; CollectionUtil.isNotEmpty(xx) && i < xx.size(); i++) {

        //读取图片,这里自行读取流,代码做了模糊
        byte[] pictureData = null;

        //写入图片
        Sheet sheet = writer.getSheet();
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();

        //设置图片单元格位置 第5列展示图片,i是行数
        ClientAnchor anchor = drawingPatriarch.createAnchor(00004 , i + 14 + 1, i + 2);
        //随单元格改变位置和大小
        anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);

        //添加图片
        int pictureIndex = sheet.getWorkbook().addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_JPEG);
        drawingPatriarch.createPicture(anchor, pictureIndex);
}

展示结果

excel导出图片

吐槽

我觉得这个应该封装到 hutool ExcelWriter 方法里头,这样才能提高工具类的功能,我相信大部分公司都在用 hutool,毕竟经过社区以及时间的大量考验,框架应该更加完善才能满足开发者的需求。

好吧,这就去提个 issue,哈哈~

社区提 issue

给hutool提issue
hutool糊涂

我在想,如果我提的不是 issue,而是一个 PR,它是不是就接受了。。。

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报