SpringBoot中怎么利用easyexcel导出Excel
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,今天就跟大家聊聊有关SpringBoot中怎么利用easyexcel导出Excel,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们创建一
千家信息网最后更新 2025年01月27日SpringBoot中怎么利用easyexcel导出Excel
今天就跟大家聊聊有关SpringBoot中怎么利用easyexcel导出Excel,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
首先我们创建一个springboot(版本是 2.1.4.RELEASE)项目,在此就不过多的啰嗦,创建好之后,首先需要引入easyexcel的maven坐标。
com.alibaba easyexcel 1.1.2-beta5
导入好了之后,我们接下来需要创建一个导出的模板类,首先要集成BaseRowModel,set、get省略,@ExcelProperty注解中的value就是表头的信息,index是在第几列,没有加注解的不会导出。
public class OrderExcelBO extends BaseRowModel { @ExcelProperty(value = {"订单ID"}, index = 0) private String id; /** * 订单描述 */ @ExcelProperty(value = {"订单描述"}, index = 2) private String description; /** * 订单对应产品id */ @ExcelProperty(value = {"产品ID"}, index = 2) private Integer productId; /** * 支付方式描述,如:apple pay */ @ExcelProperty(value = {"支付方式"}, index = 3) private String payMethod; /** * create_time */ @ExcelProperty(value = {"时间"}, index = 4) private String createTime; /** * update_time */ private String updateTime; /** * 产生订单的用户 */ @ExcelProperty(value = {"用户ID"}, index = 5) private Integer userId; /** * 支付状态:0 未支付、1支付成功支付完成、-1支付失败 */ @ExcelProperty(value = {"支付状态"}, index = 6) private String status; /** * 订单来源描述,如:ios 安卓 */ @ExcelProperty(value = {"手机型号"}, index = 7) private String platform; /** * 订单流水 */ @ExcelProperty(value = {"订单流水号"}, index = 8) private String flowNum; /** * 订单金额 */ @ExcelProperty(value = {"金额"}, index = 9) private BigDecimal price; // @ExcelProperty(value = {"收据字段"}, index = 10) private String receipt; @ExcelProperty(value = {"APP来源"}, index = 10) private String sources;}
导出的模板定义好之后,接下来就是一些封装好的工具类的调用
查出我们需要导出的数据;
生成Excel文件名和sheet名称;
直接调用封装好的工具类导出文件即可;
我们来看下导出的效果
如果你的表头比较复杂,那么根据需求,你也可自行定义,例如如下这种复杂的表头,应该如何设置
首先要修改模板类,如果合并的单元格最大为2,那么所有的表格都需要设置为2,不合并的单元格用空字符串填充,需要合并的单元格将合并部分写上相同的名称,并且排列的序号要连续,不能分开。
我们来看下导出的效果,这样就可以满足我们平时开发需要的excel导出功能。简单易上手。
工具类:
import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import java.util.ArrayList;import java.util.List;public class ExcelListener extends AnalysisEventListener { /** * 自定义用于暂时存储data。 * 可以通过实例获取该值 */ private List
import com.alibaba.excel.ExcelReader;import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.metadata.BaseRowModel;import com.alibaba.excel.metadata.Font;import com.alibaba.excel.metadata.Sheet;import com.alibaba.excel.metadata.TableStyle;import com.alibaba.excel.support.ExcelTypeEnum;import com.mochu.exception.ExcelException;import org.apache.poi.poifs.filesystem.FileMagic;import org.apache.poi.ss.usermodel.IndexedColors;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.List;public class ExcelUtil { /** * 读取 Excel(多个 sheet) * * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @return Excel 数据 list */ public static ListreadExcel(MultipartFile excel, BaseRowModel rowModel) { ExcelListener excelListener = new ExcelListener(); ExcelReader reader = getReader(excel, excelListener); if (reader == null) { return null; } for (Sheet sheet : reader.getSheets()) { if (rowModel != null) { sheet.setClazz(rowModel.getClass()); } reader.read(sheet); } return excelListener.getDatas(); } /** * 读取某个 sheet 的 Excel * * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @param sheetNo sheet 的序号 从1开始 * @return Excel 数据 list */ public static List readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo) { return readExcel(excel, rowModel, sheetNo, 1); } /** * 读取某个 sheet 的 Excel * * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @param sheetNo sheet 的序号 从1开始 * @param headLineNum 表头行数,默认为1 * @return Excel 数据 list */ public static List readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo, int headLineNum) { ExcelListener excelListener = new ExcelListener(); ExcelReader reader = getReader(excel, excelListener); if (reader == null) { return null; } reader.read(new Sheet(sheetNo, headLineNum, rowModel.getClass())); return excelListener.getDatas(); } /** * 导出 Excel :一个 sheet,带表头 * * @param response HttpServletResponse * @param list 数据 list,每个元素为一个 BaseRowModel * @param fileName 导出的文件名 * @param sheetName 导入文件的 sheet 名 * @param object 映射实体类,Excel 模型 */ public static void writeExcel(HttpServletResponse response, List extends BaseRowModel> list, String fileName, String sheetName, BaseRowModel object) { ExcelWriter writer = new ExcelWriter(getOutputStream(fileName, response), ExcelTypeEnum.XLSX); Sheet sheet = new Sheet(1, 0, object.getClass()); sheet.setSheetName(sheetName); TableStyle tableStyle = new TableStyle(); tableStyle.setTableContentBackGroundColor(IndexedColors.WHITE); Font font = new Font(); font.setFontHeightInPoints((short) 9); tableStyle.setTableHeadFont(font); tableStyle.setTableContentFont(font); sheet.setTableStyle(tableStyle); writer.write(list, sheet); writer.finish(); } /** * 导出 Excel :多个 sheet,带表头 * * @param response HttpServletResponse * @param list 数据 list,每个元素为一个 BaseRowModel * @param fileName 导出的文件名 * @param sheetName 导入文件的 sheet 名 * @param object 映射实体类,Excel 模型 */ public static ExcelWriterFactory writeExcelWithSheets(HttpServletResponse response, List extends BaseRowModel> list, String fileName, String sheetName, BaseRowModel object) { ExcelWriterFactory writer = new ExcelWriterFactory(getOutputStream(fileName, response), ExcelTypeEnum.XLSX); Sheet sheet = new Sheet(1, 0, object.getClass()); sheet.setSheetName(sheetName); sheet.setTableStyle(getTableStyle()); writer.write(list, sheet); return writer; } /** * 导出融资还款情况表 * * @param response * @param list * @param fileName * @param sheetName * @param object */ public static void writeFinanceRepayment(HttpServletResponse response, List extends BaseRowModel> list, String fileName, String sheetName, BaseRowModel object) { ExcelWriter writer = new ExcelWriter(getOutputStream(fileName, response), ExcelTypeEnum.XLSX); Sheet sheet = new Sheet(1, 0, object.getClass()); sheet.setSheetName(sheetName); sheet.setTableStyle(getTableStyle()); writer.write(list, sheet); for (int i = 1; i <= list.size(); i += 4) { writer.merge(i, i + 3, 0, 0); writer.merge(i, i + 3, 1, 1); } writer.finish(); } /** * 导出文件时为Writer生成OutputStream */ private static OutputStream getOutputStream(String fileName, HttpServletResponse response) { //创建本地文件 fileName = fileName + ".xls"; try { fileName = new String(fileName.getBytes(), "ISO-8859-1"); response.addHeader("Content-Disposition", "filename=">
import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.metadata.BaseRowModel;import com.alibaba.excel.metadata.Sheet;import com.alibaba.excel.support.ExcelTypeEnum;import java.io.IOException;import java.io.OutputStream;import java.util.List;public class ExcelWriterFactory extends ExcelWriter { private OutputStream outputStream; private int sheetNo = 1; public ExcelWriterFactory(OutputStream outputStream, ExcelTypeEnum typeEnum) { super(outputStream, typeEnum); this.outputStream = outputStream; } public ExcelWriterFactory write(List extends BaseRowModel> list, String sheetName, BaseRowModel object) { this.sheetNo++; try { Sheet sheet = new Sheet(sheetNo, 0, object.getClass()); sheet.setSheetName(sheetName); this.write(list, sheet); } catch(Exception ex) { ex.printStackTrace(); try { outputStream.flush(); } catch(IOException e) { e.printStackTrace(); } } return this; } @Override public void finish() { super.finish(); try { outputStream.flush(); } catch(IOException e) { e.printStackTrace(); } }}
看完上述内容,你们对SpringBoot中怎么利用easyexcel导出Excel有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
文件
订单
支付
表头
实体
业务
内容
单元
工具
序号
文件名
模板
处理
复杂
接下来
产品
元素
名称
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全教育预防网络诈骗PPT
四达时代软件开发面试
ibm服务器坏了换硬盘怎么办
想学网络技术选择什么职业学院
小学网络安全工作情况
智慧消防软件开发费用
网络技术爱好者俱乐部
武大网络安全直播
网络安全协议拦截
尘埃5服务器连接
网络安全宣传日绘画
计算机网络技术和艺术
网络安全教案ppt
魔兽世界wlk数据库app
工行软件开发中心 地址
软件开发了解用户的业务
软件开发将来的就业方向
数据库备份文件恢复后能用吗
万方文献数据库优缺点
软件服务器的应用场景
删除数据库所有数据
为诈骗提供服务器
阿里巴巴内存数据库
软件开发中学
杭州云锋网络技术有限公司
网络安全宣传日绘画
北京市超级服务器云主机
上海衡益网络技术
安卓手机如何使用联想的服务器
富士通服务器电源管理