当前位置: 首页 > news >正文

EasyExcel实现导出图片到excel

pom依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version>
</dependency>

实体类:

package com.aicut.monitor.vo;import com.aicut.monitor.utils.UrlImageConverter;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;/*** 豁口图片视图类* @author zhangzhi*/
@ExcelIgnoreUnannotated
@ContentRowHeight(120)
@Getter
@Setter
@ToString
public class CutterImageVO extends BaseVO{private static final long serialVersionUID = 1L;/*** 主键*/@ExcelIgnore@Schema(description="主键")private Long id;/*** 工厂编码*/@Schema(description="工厂编码")@ExcelProperty(value = "工厂编码")private String factoryCode;/*** 产线编码*/@Schema(description="产线编码")@ExcelProperty(value = "产线编码")private String productionLineCode;/*** 设备编号*/@Schema(description="设备编号")@ExcelProperty(value = "设备编号")private String deviceNumber;/*** 设备名称*/@Schema(description="设备名称")@ExcelProperty(value = "设备名称")private String deviceName;/*** 分切刀编号*/@Schema(description="分切刀编号")@ExcelProperty(value = "分切刀编号")private String cutterCode;/*** 是否磨损*/@Schema(description="是否磨损")@ExcelProperty(value = "是否磨损")private Integer wearOrNot;/*** 检测时间*/@Schema(description="检测时间")@ExcelProperty(value = "检测时间")@JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@ColumnWidth(20)private Date detectionTime;/*** 图片路径*/@Schema(description="图片路径")@ExcelProperty(value = "豁口图片",converter = UrlImageConverter.class)@ColumnWidth(20)private String imageUrl;/*** 建议操作*/@Schema(description="建议操作")@ExcelProperty(value = "建议操作")private String remark;
}

导出excel部分代码:

        String fileName = "豁口图片数据.xlsx";fileName = URLEncoder.encode(fileName, "UTF-8");response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-disposition", "attachment;filename=" + fileName);try {EasyExcel.write(response.getOutputStream(), CutterImageVO.class).sheet("豁口图片数据").doWrite(cutterImageVOList);}catch (Exception e){log.error(e.getMessage());}

String类型图片转换器:

package com.aicut.monitor.utils;import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.util.IoUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;/*** @Description 图片处理* @Author songwp* @Date 2023/3/30 15:04**/
@Slf4j
public class UrlImageConverter implements Converter<String> {public static int urlConnectTimeout = 2000;public static int urlReadTimeout = 6000;@Overridepublic Class<?> supportJavaTypeKey() {return String.class;}@Overridepublic WriteCellData<?> convertToExcelData(String url, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) throws IOException {InputStream inputStream = null;try {URL value = new URL(url);if (ObjectUtils.isEmpty(value)){return new WriteCellData<>("图片链接为空");}URLConnection urlConnection = value.openConnection();urlConnection.setConnectTimeout(urlConnectTimeout);urlConnection.setReadTimeout(urlReadTimeout);inputStream = urlConnection.getInputStream();byte[] bytes = IoUtils.toByteArray(inputStream);return new WriteCellData<>(bytes);}catch (Exception e){log.info("图片获取异常",e);return new WriteCellData<>("图片获取异常");} finally {if (inputStream != null) {inputStream.close();}}}
}

导出效果:

http://www.lryc.cn/news/288489.html

相关文章:

  • Cybellum—信息安全测试工具
  • 六、Kotlin 类型进阶
  • Chrome 浏览器插件 runtime 字段解析
  • 七分钟交友匿名聊天室源码
  • Aleo项目详细介绍-一个兼顾隐私和可编程性的隐私公链
  • qt学习:实战 http请求获取qq的吉凶
  • 【NodeJS JS】动态加载字体的各方式及注意事项;
  • 每次请求sessionid变化【SpringBoot+Vue】
  • 勤学苦练“prompts“,如沐春风“CodeArts Snap“
  • springboot(ssm线上医院挂号系统 在线挂号预约系统Java系统
  • 万界星空科技可视化数据大屏的作用
  • 5月22日比特币披萨日,今天你吃披萨了吗?
  • 内网穿透、远程桌面、VPN的理解
  • 如何发布自己的npm包,详细流程
  • 【书生·浦语大模型实战】“PDF阅读小助手”学习笔记
  • 用ChatGPT写申请文书写进常春藤联盟?
  • uni-app导航栏自定义“返回按钮”多种方法设置原生返回
  • 【kubernets】kubelet证书单独更新
  • 【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)
  • 防御保护---安全策略
  • RustDesk私有化部署,自建远程桌面搭建教程
  • Flutter环境搭建【win10虚拟机】+夜神模拟器【主机】
  • 【数据结构和算法】种花问题
  • Vite+Electron快速构建一个VUE3桌面应用(一)
  • 第二百八十九回
  • Likeshop多商户商城源码系统,支持二开
  • Excel:将截面数据转换成面板数据
  • 209.长度最小的子数组(力扣LeetCode)
  • Docker容器部署OpenCV,打造高效可移植的计算机视觉开发环境
  • 【Linux】Linux系统编程——pwd命令