什么网站类型,常德公司网站建设,wordpress汉化教程视频,旅游品牌推广方案Springboot 使用EasyExcel导出含图片并设置样式的Excel文件 Excel导出系列目录#xff1a;★★★★尤其注意#xff1a;引入依赖创建导出模板类逻辑处理controllerservice 导出效果总结 Excel导出系列目录#xff1a;
【Springboot 使用EasyExcel导出Excel文件】 【Springb… Springboot 使用EasyExcel导出含图片并设置样式的Excel文件 Excel导出系列目录★★★★尤其注意引入依赖创建导出模板类逻辑处理controllerservice 导出效果总结 Excel导出系列目录
【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用EasyExcel导出含图片并设置样式的Excel文件】 【Springboot 使用POI导出Excel文件】 【Springboot 导出Excel文件方式对比与注意事项】
★★★★尤其注意
WPS对xlsx后缀文件兼容性不好如果样式要求高需要兼容各种excel软件那就导出xls后缀的文件。具体见【Springboot 导出Excel文件方式对比与注意事项】
本文使用EasyExcel导出xlsx后缀的含指定样式图片的Excel文件用于解决上一篇文章【Springboot 使用EasyExcel导出Excel文件】的遗留问题
引入依赖
dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.1.1/version
/dependency创建导出模板类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.converters.string.StringImageConverter;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.File;
import java.io.InputStream;
import java.net.URL;Data
EqualsAndHashCode
ContentRowHeight(100)
ColumnWidth(100 / 8)
public class ImageDemoData {private File file;private InputStream inputStream;/*** 如果string类型 必须指定转换器string默认转换成string*/ExcelProperty(converter StringImageConverter.class)private String string;private byte[] byteArray;/*** 根据url导出** since 2.1.1*/private URL url;/*** 根据文件导出 并设置导出的位置。** since 3.0.0-beta1*/private WriteCellDataVoid writeCellDataFile;
}逻辑处理
controller
RestController
Slf4j
RequestMapping({/v1/test})
public class TestController {Resourceprivate TestService testService;PostMapping(/export_record)public void exportRecord(RequestBody GetRecordDto dto) {testService.exportRecord(dto);log.info(/export_record 导出记录完毕);}
}service
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;
import java.io.File;
import java.io.InputStream;
import java.net.URL;Override
public void exportRecord(GetRecordDto dto) {String fileName 导出文件下载地址后缀为xlsx;String imagePath 图片地址;try (InputStream inputStream FileUtils.openInputStream(new File(imagePath))) {ListImageDemoData list ListUtils.newArrayList();ImageDemoData imageDemoData new ImageDemoData();list.add(imageDemoData);// 放入五种类型的图片 实际使用只要选一种即可imageDemoData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));imageDemoData.setFile(new File(imagePath));imageDemoData.setString(imagePath);imageDemoData.setInputStream(inputStream);imageDemoData.setUrl(new URL(图片url));// 这里演示// 需要额外放入文字// 而且需要放入2个图片// 第一个图片靠左// 第二个靠右 而且要额外的占用他后面的单元格WriteCellDataVoid writeCellData new WriteCellData();imageDemoData.setWriteCellDataFile(writeCellData);// 这里可以设置为 EMPTY 则代表不需要其他数据了writeCellData.setType(CellDataTypeEnum.STRING);writeCellData.setStringValue(额外的放一些文字);// 可以放入多个图片ListImageData imageDataList new ArrayList();ImageData imageData new ImageData();imageDataList.add(imageData);writeCellData.setImageDataList(imageDataList);// 放入2进制图片imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath)));// 图片类型imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);// 上 右 下 左 需要留空// 这个类似于 css 的 margin// 这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。imageData.setTop(5);imageData.setRight(5);imageData.setBottom(5);imageData.setLeft(5);// 放入第二个图片imageData new ImageData();imageDataList.add(imageData);writeCellData.setImageDataList(imageDataList);imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath)));imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);imageData.setTop(5);imageData.setRight(5);imageData.setBottom(5);imageData.setLeft(50);// 设置图片的位置 假设 现在目标 是 覆盖 当前单元格 和当前单元格右边的单元格// 起点相对于当前单元格为0 当然可以不写imageData.setRelativeFirstRowIndex(0);imageData.setRelativeFirstColumnIndex(0);imageData.setRelativeLastRowIndex(0);// 前面3个可以不写 下面这个需要写 也就是 结尾 需要相对当前单元格 往右移动一格// 也就是说 这个图片会覆盖当前单元格和 后面的那一格imageData.setRelativeLastColumnIndex(1);// 写入数据EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list);}catch (Exception e){log.error(export error: ,e);}
}导出效果 总结
这个我是在网上找的我也拿到代码在本地环境实操了确认没有问题可以实现我这边简单的实现直接生成文件到本地了具体返回response流的方式大家可以借鉴我的上一篇文章【Springboot 使用EasyExcel导出Excel文件】
借鉴来源easyExcel帮助文档 这个文档已经迁移到该地址easyExcel帮助文档-新地址
但是目前两个地址都是可以用的我还是推荐用旧地址新地址的该实例描述的截图不正确容易错过大家要注意。