解决 EasyExcel 填充图片占满单元格问题
本篇主要记录解决使用EasyExcel 填充图片的两个问题:
1. 如何根据标识填充
2.如果完全占满要显示的单元格
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);}}
}
模板:
图片填充后的效果: