本篇主要记录解决使用EasyExcel 填充图片的两个问题:
- 如何根据标识填充
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);
}
}
}
模板:

图片填充后的效果:
