解决 EasyExcel 填充图片占满单元格问题

本篇主要记录解决使用EasyExcel 填充图片的两个问题:

  1. 如何根据标识填充

2.如果完全占满要显示的单元格

java 复制代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.nx.plugin.basic.common.exception.SystemException;
import com.nx.plugin.basic.common.utils.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@SpringBootTest
public class DailyTest {

    static Logger log = LoggerFactory.getLogger(DailyTest.class);



    public static void main(String[] args) {
        Map formDataMap = new HashMap();
        //待填充的图片路径
        String picUrl = "D:\\Data\\xxx ...... xxx\\99795411766660016.png";
        //生成的目标文件路径
        String targetFileNameUrl = "C:\\Users\\xxx ...... xxx\\Desktop\\生成的目标文件.xlsx";
        //模板文件路径
        String templateFileNameUrl = "D:\\Data\\xxx ...... xxx\\模板文件路径.xlsx";

        WriteCellData<Void> writeCellData = new WriteCellData<>();

        try {
            // 可以放入多个图片
            List<ImageData> imageDataList = new ArrayList<>();

            ImageData imageData = new ImageData();
            // 设置图片
            byte[] data = Files.readAllBytes(Paths.get(picUrl));

            imageData.setImage(data);
            // 类似给定了四个点位     根据给定的首行,末行,首列,末列 来锁定图片的位置
            imageData.setRelativeFirstRowIndex(0);  //合并单元格的第一行索引
            imageData.setRelativeLastRowIndex(2);   //合并单元格的第一列索引
            imageData.setRelativeFirstColumnIndex(0);   //合并单元格的最后一行索引
            imageData.setRelativeLastColumnIndex(11);   //合并单元格的最后一列索引
            //这四个属性就是在上面的范围的前提下 图片的边距
            imageData.setTop(5);
            imageData.setBottom(5);
            imageData.setLeft(5);
            imageData.setRight(5);

            imageDataList.add(imageData);
            writeCellData.setImageDataList(imageDataList);
        } catch (Exception e) {
            //获取图片出现异常
            e.printStackTrace();
        }
        
        //单元格填充图片
        formDataMap.put("codePic", writeCellData);

        File targetFile = new File(targetFileNameUrl);
        FileUtils.createFile(targetFileNameUrl);
        File templateFile = new File(templateFileNameUrl);
        if (!templateFile.exists()) {
            //todo 模板文件为空
        }
        try (ExcelWriter excelWriter = EasyExcel.write(targetFile).withTemplate(templateFileNameUrl).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            //普通表单字段填充
            excelWriter.fill(formDataMap, writeSheet);
        }
    }
}

模板:

图片填充后的效果:

相关推荐
但要及时清醒14 分钟前
ArrayList和LinkedList
java·开发语言
一叶飘零_sweeeet23 分钟前
从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
java·junit
摇滚侠40 分钟前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记
Z3r4y40 分钟前
【代码审计】RuoYi-3.0 三处安全问题分析
java·web安全·代码审计·ruoyi-3.0
与遨游于天地1 小时前
Spring解决循环依赖实际就是用了个递归
java·后端·spring
陈果然DeepVersion1 小时前
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(六)
java·spring boot·redis·微服务·面试题·rag·ai智能客服
BeingACoder1 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
DolphinScheduler社区1 小时前
真实迁移案例:从 Azkaban 到 DolphinScheduler 的选型与实践
java·大数据·开源·任务调度·azkaban·海豚调度·迁移案例
zhangkaixuan4562 小时前
Apache Paimon 写入流程
java·大数据·apache·paimon