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相关推荐

  1. R先生一步步教你用EasyExcel导出包含多图片的Excel

    R先生一步步教你用EasyExcel导出包含多图片的Excel 光与光之间的黑暗,路人永不得知 书接上文说到,R先生之前有写过一篇用EasyExel导出包含图片的Excel文件,由于在官方文档并没有找 ...

  2. 教你用EasyExcel导出包含图片列的excel

    教你用EasyExcel导出包含图片列的excel 前情概要 众所周知,导入及导出功能在后台服务中很常见,博主目前参与的这个项目就有多Excel的导入和导出,但是在我昨天完成需求的时候,突然发现项目里 ...

  3. 【Easyexcel】使用easyexcel导出带有固定表头的excel代码,并且有合并单元格操作

    以下是一个使用EasyExcel导出带有固定表头并且带有合并单元格的Excel代码示例: //创建excel对象 ExcelWriter writer = EasyExcel.write(" ...

  4. EasyExcel导出自动适应列宽 Excel样式

    EasyExcel自动适应列宽 导出直接套用此方法即可使用 在导出时引用即可 导出引用示例在下方 package com.gaiaworks.cn.opm.emp.biz.util.excel;imp ...

  5. 导出多个sheet的Excel以及在服务器上压缩文件然后再导出(在这里是压缩一个excel后导出)

    //界面上的导出按钮事件 protected void btnExcelAll_Click(object sender, EventArgs e) { Code.ExcelHelper.ExportE ...

  6. easyexcel 导出设置标题_EasyPoi设置Excel导出样式(边框,背景色,字体)

    **导出样式如下图** **使用方式** 创建一个样式工具类.工具类如下: import cn.afterturn.easypoi.excel.entity.params.ExcelExportEnt ...

  7. EasyExcel导出多个sheet

    控制层 //导出数据字典接口@GetMapping("exportData")public void exportDict(HttpServletResponse response ...

  8. 阿里easyexcel导出图片 图片路径失效excel写出空白或默认图片 导出多图片解决

    1.1 使用String类型导出   定义自己的Converter,不使用默认的StringImageConverter public class MyStringImageConverter imp ...

  9. EasyExcel的简单导出,多sheet导出,读Excel

    首先为文件创建相对路径 ​// 文件名String fileName = "测试表格_".concat(DateUtil.nowDateTime(Constants.DATE_TI ...

最新文章

  1. 几句话说明 .NET MVC中ViewData, ViewBag和TempData的区别
  2. 花5分钟过一遍jar包和war包的区别,以后都不会再迷茫
  3. php codeigniter ext,php – 私有服务器上CodeIgniter不正确的系统路径
  4. KubeCon 2018 参会记录 —— FluentBit Deep Dive 1
  5. Battery Charging Specification 1.2 中文详解 来源:www.chengxuyuans.com
  6. 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例
  7. 两侧列固定中间列变宽Div布局参考
  8. Linux环境下搭建Java Web测试环境的具体步骤
  9. 微信小程序_for循环
  10. android re浏览器下载,RE文件浏览器
  11. 在函数前面加上WINAPI、CALLBACK
  12. lumion自动保存_lumion 保存在哪里? 我想在家里做 白天带到公司做 怎么操作 保存文件可以带走的吗?...
  13. 软考系统集成项目管理工程师全真模拟题
  14. 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
  15. 职业教育计算机教学,浅析职业教育中的计算机教学思考.doc
  16. 彩涂钢板行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. AltiumDesigner覆铜挖空技巧总结
  18. 使用html创建浮标,介绍最基本的浮标调整方法,让大家钓鱼时鱼鱼得水
  19. 2011最牛高考作文:时间在流逝——上还是不上大学?
  20. java输出月份对应的季节

热门文章

  1. 阿里CEO张勇首谈商业未来:大数据将成新能源
  2. 红包大战打响,而我们却被夺走了时间和注意力,值还是不值?
  3. 一个学计算机应用基础,2015-2016学年度第一学期《计算机应用基础》试题
  4. Win10系统下从tensorflow源码编译tensorflow-gpu 1.15
  5. 霍金已经不是我们认识的那个霍金了!
  6. 关于JS对象转换为字符串的实现
  7. 基于STC15W4K48S4芯片的温度检测控制系统(支持手机蓝牙和串口屏的异步串口通信)
  8. 响铃:一年一度的盛典套餐,吃相如何更优雅?
  9. 一个极简的“个人名片”网页
  10. 计算机会考操作题页面设置,信息技术考试操作题