SpringBoot-EasyExcel导出数据(带图片)
前言
EasyExcel 是阿里巴巴开源的一个Java操作Excel的技术,和EasyPoi一样是封装Poi的工具类。
但是不同的地方在于,在EasyExcel中解决了Poi技术读取大批量数据耗费内存的问题。
当然了,也封装了很多常用的Excel操作
- 最基本的导入导出
- 图片的导入导出
- 大批量数据的导入导出
- 模板的导出
- 官方地址:https://alibaba-easyexcel.github.io/quickstart/write.html
一、引入的maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
二、导出的实体类
EasyExcel也是注解式开发,常用注解如下
- ExcelProperty 指定当前字段对应excel中的那一列
- ExcelIgnore 默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
- DateTimeFormat 日期转换,用String去接收excel日期格式的数据会调用这个注解。里面的value参照java.text.SimpleDateFormat
- NumberFormat 数字转换,用String去接收excel数字格式的数据会调用这个注解。里面的value参照java.text.DecimalFormat
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.songwp.config.SxjgUrlImageConverter;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.net.URL; /**
* @Description 老师信息实体类
* @Author songwp
* @Date 2023/3/30 13:57
**/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ContentRowHeight(120)
@AllArgsConstructor
@NoArgsConstructor
public class Teacher implements Serializable { /**
* 教师编号
*/
@ExcelProperty("教师编号")
@ExcelIgnore
private Integer teacherId;
/**
* 教师名称
*/
@ExcelProperty("教师名称")
private String teacherName;
/**
* 教师图片
*/
@ExcelProperty(value = {"教师图片"},converter = SxjgUrlImageConverter.class)
private URL teacherImage;
/**
* 教师状态: 0 -任教中 1 - 为任教
*/
@ExcelProperty("教师状态")
@ExcelIgnore
private Integer teacherStatus; /**
* 教师状态: 0 -任教中 1 - 为任教
*/
@ExcelProperty("教师状态")
private String teacherStatusStr;
/**
* 住址信息
*/
@ExcelProperty("住址信息")
private String address;
三、图片转换处理类
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 SxjgUrlImageConverter implements Converter<URL> {
public static int urlConnectTimeout = 2000;
public static int urlReadTimeout = 6000; @Override
public Class<?> supportJavaTypeKey() {
return URL.class;
} @Override
public WriteCellData<?> convertToExcelData(URL value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws IOException {
InputStream inputStream = null;
try {
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();
}
}
}
}
四、导出的工具类
import com.alibaba.excel.EasyExcel;
import com.sxjgkg.sjsk.innovation.InnovationConstants;
import com.sxjgkg.sjsk.zhaixing.core.ZhaixingException;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List; /**
*
* @author songwp
* @since 2023-04-20 14:04:42
*/
@Slf4j
public class EasyExcelUtil { /**
* 导出excel
*
* @param response 响应实体类
* @param sheetName sheet页签名称
* @param clazz 模板的字节码对象
* @param list 需要导出的数据列表
* @throws ZhaixingException 业务异常
*/
public static void exportExcel(HttpServletResponse response,
String sheetName,
Class clazz,
List<?> list) throws ZhaixingException {
try {
String fileName = URLEncoder.encode(sheetName, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), clazz).autoCloseStream(Boolean.TRUE).sheet("sheet")
.doWrite(list);
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ZhaixingException(InnovationConstants.Ex.EXPORT_EXCEPTION,e.getMessage());
}
}
}
五、导出方法测试
/**
* 教师信息表导出
* @param response
*/
@GetMapping("/export")
public void export(HttpServletResponse response) throws MalformedURLException {
// 准备数据
List<Teacher> teachers = new ArrayList<>();
teachers.add(new Teacher(1,"马云",new URL("https://money.gucheng.com/UploadFiles_6503/201901/2019012516201400.jpg"),1,"未任教","浙江杭州"));
teachers.add(new Teacher(2,"王健林",new URL("https://img1.cache.netease.com/ent/2016/8/23/20160823221523324f5.jpg"),1,"未任教","上海浦东新区"));
teachers.add(new Teacher(3,"雷军",new URL("https://i1.073img.com/140526/5808312_102252_1.jpg"),1,"未任教","北京通州区"));
teachers.add(new Teacher(4,"马化腾",new URL("https://x0.ifengimg.com/res/2020/F43C0869EE9D07C77C0D82D13266BB1F94DBD148_size583_w1944_h1639.jpeg"),1,"未任教","中国深圳"));
// 方法一
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = null;
try {
fileName = URLEncoder.encode("教师信息表", "UTF-8").replaceAll("\\+", "%20");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
try {
EasyExcel.write(response.getOutputStream(), Teacher.class).sheet("教师信息表").doWrite(teachers);
} catch (IOException e) {
throw new RuntimeException(e);
}
// 方法二
EasyExcelUtil.exportExcel(response,"教师信息表", Teacher.class,teachers)
}
六、导出文件效果展示

SpringBoot-EasyExcel导出数据(带图片)的更多相关文章
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...
- 手把手教你springboot中导出数据到excel中
手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...
- springboot使用EasyExcel,导出数据到Excel表格,并且将Excel表中数据导入
一.导出至Excel 1.导入依赖 导出方法需要使用到fastJson的依赖,这里也直接导入 点击查看代码 <!--阿里的easyexcel--> <dependency> & ...
- java导出word(带图片)
public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOE ...
- NPOI 导出excel带图片,可控大小
using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI.DDF;using NPOI.SS.UserModel;using System.I ...
- asp.net 导出excel带图片
protected void btgua_Click(object sender, EventArgs e) { DataTable dt = ds.Tables[0]; if (dt != null ...
- spring boot 导出数据到excel
手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...
- 使用VUE+SpringBoot+EasyExcel 整合导入导出数据
使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...
- SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能
批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
随机推荐
- archlinux xfce未中文化 goldendict不能显示中文
下载个中文字体包就好了 https://wiki.archlinuxcn.org/wiki/简体中文本地化
- jQuery AJAX 常见属性
1 jQuery.ajax(...) 2 部分参数: 3 url:请求地址 4 type:请求方式,GET.POST(1.9.0之后用method) 5 headers:请求头 6 data:要发送的 ...
- python 1992和2006年国家标准学科分类和代码标准化并存入MySQL数据库
数据表 代码 1 import pandas as pd 2 import pymysql 3 4 5 def get_subject_1992(): 6 res={} 7 the_former_co ...
- C++ future
promise 空模板 非 void 特化,用于在线程间交流对象 void 特化,用于交流无状态事件 类模板 std::promise 提供存储值或异常的设施,之后通过 std::promise 对象 ...
- #主席树,Dijkstra,哈希#CF464E The Classic Problem
题目 边权均为2的幂次的无向图,求 \(S\) 到 \(T\) 的最短路 \(n,m\leq 10^5\) 分析 最短路直接考虑用 Dijkstra,它需要维护松弛操作和堆, 那么也就是要重载加号和小 ...
- #扫描线,线段树#洛谷 3875 [TJOI2010]被污染的河流
题目 分析 矩阵面积并不是扫描线模板题吗 然后连题目都没仔细看就交了 发现它是一个线段向外扩展一个格子qwq 代码 #include <cstdio> #include <cctyp ...
- org.xml.sax.SAXParseException; lineNumber: 11;
org.xml.sax.SAXParseException; lineNumber: 11; 点击clean 然后再启动
- 重新点亮linux 命令树————文件列表查看命令[二]
前言 整理一下文件查看命令 正文 主要是pwd和ls命令 pwd 这个是一个非常常用的命令,在shell脚本中基本都有,表示的是当前目录. 这是一个非常简单,但是非常实用的命令. 通过使用pwd -- ...
- 向量数据库之Lancedb学习记录
简介 Lancedb是一个用于人工智能的开源矢量数据库,旨在存储.管理.查询和检索大规模多模式数据的嵌入.Lancedb的核心是用Rust编写的,并构建在Lance之上,专为高性能 ML 工作负载和快 ...
- 力扣263(java)-丑数(简单)
题目: 丑数 就是只包含质因数 2.3 和 5 的正整数. 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 示例 1: 输入:n = 6输出:t ...