easyExcel导出多个sheet的excel
easyExcel导出
- 导出背景
- 依赖
- 单个sheet的excel导出
- 定义导出模型
- controller层代码
- 多个sheet的excel导出
- 所用的导出模型
- controller层代码
- 所用到的工具类
导出背景
需求是导出业务数据生成单一sheet的excel或者是导出业务数据生成多sheet的excel。文章记录一下实现过程。
正文开始:
依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency>
单个sheet的excel导出
定义导出模型
定义导出excel的字段模型,对应excel的表头。
package com.jeesite.modules.exportexcel.excelbo;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Data;/*** 业务字典表数据导出* @author fyn* @date 2021/7/30*/
@Data
public class ExcelBo extends BaseRowModel {@ExcelProperty(value = {"编码"}, index = 0)private String id;@ExcelProperty(value = {"名称"}, index = 1)private String dictionariesName;
}
controller层代码
package com.jeesite.modules.exportexcel.controller;import com.alibaba.excel.EasyExcel;
import com.jeesite.modules.exportexcel.excelbo.ExcelBo;
import com.rewin.modules.entity.TbusinessDictionariesEnergy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;@RestController
@RequestMapping("${adminPath}/exportExcelDemo")
@Slf4j
public class ExportController {@GetMapping(value = "/export")public void exportExcel(HttpServletResponse response) {String sheetName = "设备类型";//此处数据集为手动创建数据 -- 可替换为具体业务逻辑数据ArrayList<TbusinessDictionariesEnergy> tbusinessDictionariesEnergyList = new ArrayList<>();for(int i =1;i<4;i++){TbusinessDictionariesEnergy tbusinessDictionariesEnergy = new TbusinessDictionariesEnergy();tbusinessDictionariesEnergy.setId(String.valueOf(i));tbusinessDictionariesEnergy.setDictionariesName("数据" + i);tbusinessDictionariesEnergyList.add(tbusinessDictionariesEnergy);}ArrayList<ExcelBo> excelBoArrayList = new ArrayList<>();tbusinessDictionariesEnergyList.forEach(tbusinessDictionariesEnergy1 -> {ExcelBo tableHeaderExcelProperty = new ExcelBo();tableHeaderExcelProperty.setId(tbusinessDictionariesEnergy1.getId());tableHeaderExcelProperty.setDictionariesName(tbusinessDictionariesEnergy1.getDictionariesName());excelBoArrayList.add(tableHeaderExcelProperty);});String fileName = new String("设备类型.xlsx".getBytes(), StandardCharsets.ISO_8859_1);response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-disposition", "attachment;filename=" + fileName );try {EasyExcel.write(response.getOutputStream(), ExcelBo.class).sheet(sheetName).sheetNo(1).doWrite(excelBoArrayList);}catch (Exception e){log.error(e.getMessage());}}}
启动项目之后,直接在浏览器地址栏访问 :
浏览器左下角弹框:
打开看一下内容:
OK,到此单个sheet的excel导出完成。
多个sheet的excel导出
所用的导出模型
package com.jeesite.modules.exportexcel.excelbo;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Data;/*** 企业数据导出字段* @author fyn* @date 2021/7/30*/
@Data
public class CompanyExcelBo extends BaseRowModel {@ExcelProperty(value = {"序号"}, index = 0)private Integer number;@ExcelProperty(value = {"企业社会信用代码"}, index = 1)private String companySocialCreditCode;@ExcelProperty(value = {"企业名称"}, index = 2)private String companyName;}
controller层代码
package com.jeesite.modules.exportexcel.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.jeesite.modules.exportexcel.excelbo.CompanyExcelBo;
import com.jeesite.modules.exportexcel.excelbo.ExcelBo;
import com.jeesite.modules.exportexcel.util.MultipleSheelPropety;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;@RestController
@RequestMapping("${adminPath}/exportExcelDemo")
@Slf4j
public class ExportController {/*** 多个sheet的excel导出* @param response*/@GetMapping(value = "/sheetSExportAllExcel")public void sheetSExportAllExcel(HttpServletResponse response) {ArrayList<MultipleSheelPropety> excelList = new ArrayList<>();for(int j=1;j<3;j++){if(1 == j){//第一个sheet数据 此处数据集为手动创建数据 -- 实际开发替换为具体业务逻辑数据ArrayList<ExcelBo> excelBoArrayList = new ArrayList<>();for(int i =1;i<4;i++){//设备数据ExcelBo excelBo = new ExcelBo();excelBo.setId(String.valueOf(i));excelBo.setDictionariesName("数据" + i);excelBoArrayList.add(excelBo);}Sheet sheet = new Sheet(j, 0);sheet.setSheetName("设备");MultipleSheelPropety multipleSheelPropety = new MultipleSheelPropety();multipleSheelPropety.setData(excelBoArrayList);multipleSheelPropety.setSheet(sheet);excelList.add(multipleSheelPropety);}else if(2 == j){//第二个sheet数据 此处数据集为手动创建数据 -- 实际开发替换为具体业务逻辑数据ArrayList<CompanyExcelBo> companyExcelBoArrayList = new ArrayList<CompanyExcelBo>();for (int i=1;i<4;i++){//企业数据CompanyExcelBo companyExcelBo = new CompanyExcelBo();companyExcelBo.setNumber(i);companyExcelBo.setCompanyName("知名企业" + i);companyExcelBo.setCompanySocialCreditCode("#1¥@" + i);companyExcelBoArrayList.add(companyExcelBo);}Sheet sheet = new Sheet(j, 0);sheet.setSheetName("企业");MultipleSheelPropety multipleSheelPropety = new MultipleSheelPropety();multipleSheelPropety.setData(companyExcelBoArrayList);multipleSheelPropety.setSheet(sheet);excelList.add(multipleSheelPropety);}}String fileName = new String("全部数据.xlsx".getBytes(), StandardCharsets.ISO_8859_1);response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-disposition", "attachment;filename=" + fileName );ExcelWriter excelWriter = null;try{excelWriter = EasyExcel.write(response.getOutputStream()).build();for(int i = 0;i<excelList.size();i++){if(!CollectionUtils.isEmpty(excelList.get(i).getData())){//这里 需要指定写用哪个class去写WriteSheet writeSheet = EasyExcel.writerSheet(i, excelList.get(i).getSheet().getSheetName()).head(excelList.get(i).getData().get(0).getClass()).build();excelWriter.write(excelList.get(i).getData(), writeSheet);}}//千万别忘记finish 会帮忙关闭流excelWriter.finish();}catch (Exception e){log.error(e.getMessage());}}}
所用到的工具类
package com.jeesite.modules.exportexcel.util;import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import lombok.Data;import java.util.List;@Data
public class MultipleSheelPropety{private List<? extends BaseRowModel> data;private Sheet sheet;
}
通过浏览器访问一下接口:
浏览器左下角弹框:
打开看一下:
没问题,两个sheet的excel导出完成。
多个sheet可使用同样方法根据具体场景构造并导出。
easyExcel导出多个sheet的excel相关推荐
- R先生一步步教你用EasyExcel导出包含多图片的Excel
R先生一步步教你用EasyExcel导出包含多图片的Excel 光与光之间的黑暗,路人永不得知 书接上文说到,R先生之前有写过一篇用EasyExel导出包含图片的Excel文件,由于在官方文档并没有找 ...
- 教你用EasyExcel导出包含图片列的excel
教你用EasyExcel导出包含图片列的excel 前情概要 众所周知,导入及导出功能在后台服务中很常见,博主目前参与的这个项目就有多Excel的导入和导出,但是在我昨天完成需求的时候,突然发现项目里 ...
- 【Easyexcel】使用easyexcel导出带有固定表头的excel代码,并且有合并单元格操作
以下是一个使用EasyExcel导出带有固定表头并且带有合并单元格的Excel代码示例: //创建excel对象 ExcelWriter writer = EasyExcel.write(" ...
- EasyExcel导出自动适应列宽 Excel样式
EasyExcel自动适应列宽 导出直接套用此方法即可使用 在导出时引用即可 导出引用示例在下方 package com.gaiaworks.cn.opm.emp.biz.util.excel;imp ...
- 导出多个sheet的Excel以及在服务器上压缩文件然后再导出(在这里是压缩一个excel后导出)
//界面上的导出按钮事件 protected void btnExcelAll_Click(object sender, EventArgs e) { Code.ExcelHelper.ExportE ...
- easyexcel 导出设置标题_EasyPoi设置Excel导出样式(边框,背景色,字体)
**导出样式如下图** **使用方式** 创建一个样式工具类.工具类如下: import cn.afterturn.easypoi.excel.entity.params.ExcelExportEnt ...
- EasyExcel导出多个sheet
控制层 //导出数据字典接口@GetMapping("exportData")public void exportDict(HttpServletResponse response ...
- 阿里easyexcel导出图片 图片路径失效excel写出空白或默认图片 导出多图片解决
1.1 使用String类型导出 定义自己的Converter,不使用默认的StringImageConverter public class MyStringImageConverter imp ...
- EasyExcel的简单导出,多sheet导出,读Excel
首先为文件创建相对路径 // 文件名String fileName = "测试表格_".concat(DateUtil.nowDateTime(Constants.DATE_TI ...
最新文章
- 几句话说明 .NET MVC中ViewData, ViewBag和TempData的区别
- 花5分钟过一遍jar包和war包的区别,以后都不会再迷茫
- php codeigniter ext,php – 私有服务器上CodeIgniter不正确的系统路径
- KubeCon 2018 参会记录 —— FluentBit Deep Dive 1
- Battery Charging Specification 1.2 中文详解 来源:www.chengxuyuans.com
- 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例
- 两侧列固定中间列变宽Div布局参考
- Linux环境下搭建Java Web测试环境的具体步骤
- 微信小程序_for循环
- android re浏览器下载,RE文件浏览器
- 在函数前面加上WINAPI、CALLBACK
- lumion自动保存_lumion 保存在哪里? 我想在家里做 白天带到公司做 怎么操作 保存文件可以带走的吗?...
- 软考系统集成项目管理工程师全真模拟题
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 职业教育计算机教学,浅析职业教育中的计算机教学思考.doc
- 彩涂钢板行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- AltiumDesigner覆铜挖空技巧总结
- 使用html创建浮标,介绍最基本的浮标调整方法,让大家钓鱼时鱼鱼得水
- 2011最牛高考作文:时间在流逝——上还是不上大学?
- java输出月份对应的季节
热门文章
- 阿里CEO张勇首谈商业未来:大数据将成新能源
- 红包大战打响,而我们却被夺走了时间和注意力,值还是不值?
- 一个学计算机应用基础,2015-2016学年度第一学期《计算机应用基础》试题
- Win10系统下从tensorflow源码编译tensorflow-gpu 1.15
- 霍金已经不是我们认识的那个霍金了!
- 关于JS对象转换为字符串的实现
- 基于STC15W4K48S4芯片的温度检测控制系统(支持手机蓝牙和串口屏的异步串口通信)
- 响铃:一年一度的盛典套餐,吃相如何更优雅?
- 一个极简的“个人名片”网页
- 计算机会考操作题页面设置,信息技术考试操作题