最终效果

pom版本

 <developer>    <groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></developer>

实现代码

package com.alibaba.easyexcel.test.demo.write;import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.metadata.data.ClientAnchorData;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.write.style.column.AutoColumnWidthStyleStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;/*** 图片导出** @author dqh* @date 2022/11/3 15:20*/
public class ImageExportTest {/*** 图片导出* <p>* 1. 创建excel对应的实体对象 参照{@link ImageDemoData}* <p>* 2. 直接写即可*/@Testpublic void imageWrite() throws Exception {//文件最后生成的路径String fileName = TestFileUtil.getPath() + "imageWrite.xlsx";System.out.println(fileName);//测试用的图片路径String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";String imagePath2 = TestFileUtil.getPath() + "converter" + File.separator + "img2.jpeg";//数据列表DemoList<ImageDemoData> demoDataList = new ArrayList<>();//图片路径List<String> path1 = new ArrayList<>();path1.add(imagePath);List<String> path2 = new ArrayList<>();path2.add(imagePath);path2.add(imagePath2);List<String> path3 = new ArrayList<>();path3.add(imagePath);path3.add(imagePath);path3.add(imagePath2);List<String> path4 = new ArrayList<>();path4.add(imagePath);path4.add(imagePath2);path4.add(imagePath);path4.add(imagePath2);demoDataList.add(new ImageDemoData("王离", path1));demoDataList.add(new ImageDemoData("杨开", path2));demoDataList.add(new ImageDemoData("欧阳微微", path3));demoDataList.add(new ImageDemoData("上官婉儿", path4));genImageExcel(demoDataList, fileName);}/*** 生成有图片的excel** @param demoDataList 数据列表* @param fileName     生成文件路径*/private void genImageExcel(List<ImageDemoData> demoDataList, String fileName) {if (CollectionUtils.isEmpty(demoDataList)) {return;}//图片列最大图片数AtomicReference<Integer> maxImageSize = new AtomicReference<>(0);demoDataList.forEach(item -> {if (CollectionUtils.isNotEmpty(item.getImagePathList()) && item.getImagePathList().size() > maxImageSize.get()) {maxImageSize.set(item.getImagePathList().size());}});//设置列长度所用类AutoColumnWidthStyleStrategy longWidth = new AutoColumnWidthStyleStrategy();demoDataList.forEach(item -> {WriteCellData<Void> writeCellData = new WriteCellData<>();if (CollectionUtils.isNotEmpty(item.getImagePathList())) {//每张图片间距Integer splitWidth = 2;//每张图片的长度Integer imageWidth = 80;//图片列的最大长度Integer sumWidth = maxImageSize.get() * (imageWidth + splitWidth);List<ImageData> imageDataList = new ArrayList<>();List<String> imagePathList = item.getImagePathList();for (int i = 1; i <= imagePathList.size(); i++) {String path = imagePathList.get(i - 1);Integer left = imageWidth * (i - 1) + i * splitWidth;Integer right = sumWidth - imageWidth - left;ImageData imageData = new ImageData();try {imageData.setImage(FileUtils.readFileToByteArray(new File(path)));} catch (IOException e) {e.printStackTrace();}imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);//距离单元格顶部距离imageData.setTop(1);//距离单元格底部距离imageData.setBottom(1);//距离单元格左边距离imageData.setLeft(left);//距离单元格右边距离imageData.setRight(right);imageData.setAnchorType(ClientAnchorData.AnchorType.DONT_MOVE_DO_RESIZE);imageDataList.add(imageData);}writeCellData.setImageDataList(imageDataList);Map<String, Integer> zdyColumnWidth = new HashMap<>();//图片列名称,对应导出对象的列名称,图片列长度zdyColumnWidth.put("上传图片", sumWidth / 6);longWidth.setZdyColumnWidth(zdyColumnWidth);}item.setWriteCellDataFile(writeCellData);});//写入数据EasyExcel.write(fileName, ImageDemoData.class).registerWriteHandler(longWidth).sheet().doWrite(demoDataList);}}
package com.alibaba.easyexcel.test.demo.write;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;import java.util.List;/*** 图片导出类** @author Jiaju Zhuang*/
@Getter
@Setter
@EqualsAndHashCode
@ContentRowHeight(40)
public class ImageDemoData {/*** 根据文件导出 并设置导出的位置。** @since 3.0.0-beta1*/@ExcelProperty(value = "用户名称")private String test;/*** 图片路径*/@ExcelIgnoreprivate List<String> imagePathList;/*** 图片列*/@ExcelProperty(value = "上传图片")private WriteCellData<Void> writeCellDataFile;public ImageDemoData() {}public ImageDemoData(String test, List<String> imagePathList) {this.test = test;this.imagePathList = imagePathList;}public ImageDemoData(List<String> imagePathList) {this.imagePathList = imagePathList;}
}
package com.alibaba.excel.write.style.column;import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 自动列宽*/
public class AutoColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH = 255;//自定义列的列宽private Map<String, Integer> zdyColumnWidth = MapUtils.newHashMapWithExpectedSize(2);private final Map<Integer, Map<Integer, Integer>> cache = MapUtils.newHashMapWithExpectedSize(8);@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell,Head head,Integer relativeRowIndex, Boolean isHead) {boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);if (!needSetWidth) {return;}if (zdyColumnWidth.containsKey(cell.toString())) {writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), zdyColumnWidth.get(cell.toString()) * 256);return;}Map<Integer, Integer> maxColumnWidthMap = cache.get(writeSheetHolder.getSheetNo());if (maxColumnWidthMap == null) {maxColumnWidthMap = new HashMap<Integer, Integer>(16);cache.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);}Integer columnWidth = dataLength(cellDataList, cell, isHead);if (columnWidth < 0) {return;}if (columnWidth > MAX_COLUMN_WIDTH) {columnWidth = MAX_COLUMN_WIDTH;}Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());if (maxColumnWidth == null || columnWidth > maxColumnWidth) {maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);}}private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, Boolean isHead) {if (isHead) {return cell.getStringCellValue().getBytes().length;}WriteCellData<?> cellData = cellDataList.get(0);CellDataTypeEnum type = cellData.getType();if (type == null) {return -1;}switch (type) {case STRING:return cellData.getStringValue().getBytes().length;case BOOLEAN:return cellData.getBooleanValue().toString().getBytes().length;case NUMBER:return cellData.getNumberValue().toString().getBytes().length;default:return -1;}}public void setZdyColumnWidth(Map<String, Integer> zdyColumnWidth) {this.zdyColumnWidth = zdyColumnWidth;}
}

【JAVA】easyexcel 导出excel文件带多个图片相关推荐

  1. Java 使用EasyExcel导出excel文件

    Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...

  2. swagger easyExcel导出Excel文件打不开,文件损坏

    alibaba/easyexcel文件导出 swagger easyExcel导出Excel文件打不开,文件损坏 文件下载打不开,将文件输出到本地发现可以打开,而且swagger下载的文件大小比本地文 ...

  3. Java分页导出Excel文件

    Java分页导出Excel文件 1.开发微信小程序接入广告获取收益 技术: Springboot + mongodb + maven +Layui + thymeleaf 上一篇博客已经讲解了Java ...

  4. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

  5. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

  6. easyexcel导出excel文件合并相同单元格数据

    1.引入easyexcel依赖 !-- 阿里开源easyexcel--><dependency><groupId>com.alibaba</groupId>& ...

  7. java ajax 导出excel文件_springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

  8. java后端导出excel文件流,前端vue接收下载

    1.后端excel导出工具类 主要依赖 <!--工具包--><dependency><groupId>cn.hutool</groupId><ar ...

  9. Java web导出excel文件 - poi

    Javaweb项目加入导出excel功能只需要2个步骤: 1.在需要的controller里面加入下面接口代码: /*** excel导出controller层代码** @param params* ...

最新文章

  1. 6大理由,告诉你为什么这个大会你不能错过! | 文末有福利
  2. wdcp系统升级mysql5.7.11
  3. 《树莓派实战秘籍》——1.17 技巧17添加重启按钮
  4. java enumerator_NSEnumerator使用
  5. 读取txt文件赋值到DataGridView中
  6. Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
  7. 股票预埋单第二天还有效么?
  8. pyside qt for python 在ubuntu下构建依赖
  9. java核心技术卷一适合初学者吗_为什么我觉得Java核心技术卷一写的不好呢?
  10. IDEA 运行 Tomcat 中文乱码的各种问题
  11. 中国IT产业未来在哪里
  12. spring框架多数据源切换问题的解决
  13. 微信爬取过程中参数分析
  14. 2018.6清北学堂day6考试
  15. java excel 插入新行_复制一行,在多个工作表Excel VBA上插入多个带有粘贴信息的新行...
  16. Bootstrap系列之纵向对齐(Vertical alignment)
  17. C# Process.HasExited准确性
  18. 植物大战僵尸android11,植物大战僵尸自创版APK
  19. 李嘉诚--理财--如何支配你的金钱
  20. Error:(3, 41) java: 程序包org.apache.kafka.clients.producer不存在 错误提示解决办法

热门文章

  1. Android 模仿淘宝历史记录,记录存在手机内
  2. Improved 3D Object Detector Under Snowfall Weather Condition Based on LiDAR Point Cloud
  3. C#语言 Asp.net旅游网站在线旅游信息网站(旅游系统旅游网站)旅游管理系统旅游景区旅游网站
  4. 手机寂静岭 java 攻略_寂静岭PT最终房间进入及通关攻略
  5. 微信挂机托管服务器nodejs,怎么执行node app.js 脚本
  6. 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
  7. android 修改应用权限设置在哪里,Android在应用设置里关闭权限,返回生命周期处理...
  8. iOS XCode支持低系统版本
  9. Win32 OpenGL 编程(1)Win32下的OpenGL编程必须步骤
  10. EPICS记录参考--Waveform记录(waveform)