功能背景

简单的说下这个功能的背景需求吧,有类似需求的可以复用,果然导入还没写完,导出的功能接踵而来,一块写了吧

  • 实现excel导出(依旧废话…)
  • 多个sheet页一起导出
  • 第一个sheet页数据表头信息有两行
  • 样式稍微美观,列宽可以自定义等
  • 数据量稍微有些大(多个sheet页总量50w左右)

项目引入依赖

gradle:

compile "com.alibaba:easyexcel:3.1.0"

maven:

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

注意: 3+版本的的easyexcel,使用poi 5+版本时,需要手动排除:poi-ooxml-schemas,例如:

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

项目编码

如多个表格样式相同,可编写一个父类,将样式定义在父类上,子类继承父类即可。

  • 定义经销商信息对象,代码如下:
package org.cango.dealer.manage.model.excel;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentFontStyle;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;/*** @author xiaoxiaofeng* @date 2022/6/6*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
@HeadFontStyle(fontHeightInPoints = 12)
@ContentFontStyle(fontHeightInPoints = 11)
@ColumnWidth(20)
public class ExcelCompany {// -------------------- 基本信息 start -------------@ExcelProperty({"基本信息", "公司名称"})private String companyName;@ExcelProperty({"基本信息", "省份"})private String province;@ExcelProperty({"基本信息", "成立时间"})private Date startDate;@ExcelProperty({"基本信息", "企业状态"})private String entStatus;@ColumnWidth(30)@ExcelProperty({"基本信息", "博客地址"})private String csdnAddress;// ---------------- 基本信息 end ---------------------// ---------------- 经营信息 start ---------------------@ExcelProperty({"经营信息", "员工数"})private String employeeMaxCount;@ExcelProperty({"经营信息", "网站地址"})private String netAddress;@ExcelProperty({"经营信息", "所属区域省"})private String businessProvinceName;@ExcelProperty({"经营信息", "所属区域市"})private String businessCityName;@ExcelProperty({"经营信息", "所属区域区县"})private String businessAreaName;// ---------------- 经营信息 end ---------------------
}
  • 定义联系人信息对象,代码如下:
package org.cango.dealer.manage.model.excel;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentFontStyle;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author xiaoxiaofeng* @date 2022/6/6*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
@HeadFontStyle(fontHeightInPoints = 12)
@ContentFontStyle(fontHeightInPoints = 11)
@ColumnWidth(20)
public class ExcelContact {@ExcelProperty("公司名称")private String companyName;@ExcelProperty("姓名")private String name;@ExcelProperty("身份证号码")private String idCard;@ExcelProperty("电话号码")private String mobile;@ExcelProperty("职位")private String contactPostName;
}
  • 编写controller进行测试,代码如下:
package org.cango.dealer.manage.controller;import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import lombok.extern.slf4j.Slf4j;
import org.cango.dealer.manage.model.excel.ExcelCompany;
import org.cango.dealer.manage.model.excel.ExcelContact;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @author zhangfuzeng* @date 2022/6/9*/
@Slf4j
@RestController
public class ExportExcelController {@GetMapping("/exportExcel")public void exportExcel(HttpServletResponse response) {try (OutputStream out = response.getOutputStream()) {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("笑小枫测试导出", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");handleExcel(out);excelWriter.finish();out.flush();} catch (Exception e) {log.error(e.getMessage());}}private void handleExcel(OutputStream out) {try (ExcelWriter excelWriter = EasyExcelFactory.write(out).build()) {WriteSheet dealerSheet = EasyExcel.writerSheet(0, "经销商信息").head(ExcelCompany.class).build();WriteSheet contactSheet = EasyExcel.writerSheet(1, "联系人").head(ExcelContact.class).build();excelWriter.write(getCompany(), dealerSheet);excelWriter.write(getContact(), contactSheet);}}private List<ExcelCompany> getCompany() {List<ExcelCompany> companyList = new ArrayList<>();for (int i = 0; i < 5; i++) {companyList.add(ExcelCompany.builder().companyName("笑小枫公司" + i).province("上海市").businessProvinceName("山东省").businessCityName("临沂市").businessAreaName("河东区").entStatus("营业").netAddress("www.xiaoxiaofeng.site").csdnAddress("https://zhangfz.blog.csdn.net").employeeMaxCount("100").startDate(new Date()).build());}return companyList;}private List<ExcelContact> getContact() {List<ExcelContact> contactList = new ArrayList<>();for (int i = 0; i < 5; i++) {contactList.add(ExcelContact.builder().companyName("笑小枫公司" + i).name("笑小枫" + i).mobile("183000000000").idCard("371324199011111111").contactPostName("后端").build());}return contactList;}
}

测试结果

浏览器请求:http://localhost:8080/exportExcel

经销商sheet页信息:

联系人sheet页信息:

相关属性解读

注解

参数
通用参数
WriteWorkbook,WriteSheet ,WriteTable都会有的参数,如果为空,默认使用上级。

converter 转换器,默认加载了很多转换器。也可以自定义。
writeHandler 写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用
relativeHeadRowIndex 距离多少行后开始。也就是开头空几行
needHead 是否导出头
head 与clazz二选一。写入文件的头列表,建议使用class。
clazz 与head二选一。写入文件的头对应的class,也可以使用注解。
autoTrim 字符串、表头等数据自动trim
WriteWorkbook(理解成excel对象)参数
excelType 当前excel的类型 默认xlsx
outputStream 与file二选一。写入文件的流
file 与outputStream二选一。写入的文件
templateInputStream 模板的文件流
templateFile 模板文件
autoCloseStream 自动关闭流。
password 写的时候是否需要使用密码
useDefaultStyle 写的时候是否是使用默认头
WriteSheet(就是excel的一个Sheet)参数
sheetNo 需要写入的编码。默认0
sheetName 需要些的Sheet名称,默认同sheetNo
WriteTable(就把excel的一个Sheet,一块区域看一个table)参数
tableNo 需要写入的编码。默认0

Java使用EasyExcel导出Excel相关推荐

  1. Java 使用EasyExcel导出excel文件

    Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...

  2. 【JAVA】easyexcel 导出excel文件带多个图片

    最终效果 pom版本 <developer> <groupId>com.alibaba</groupId><artifactId>easyexcel&l ...

  3. 【笑小枫的SpringBoot系列】【十三】JAVA使用EasyExcel导出excel

    功能背景 简单的说下这个功能的背景需求吧,有类似需求的可以复用,果然导入还没写完,导出的功能接踵而来,一块写了吧 实现excel导出(依旧废话-) 多个sheet页一起导出 第一个sheet页数据表头 ...

  4. Java 通过EasyExcel导出的Excel文档的字体,背景色,自动列宽等符合要求

    这次开任务使用的是EasyExcel导出Excel文档,但是在任务过程中,生成的文档的格式要求并不符合产品和测试的期望值,如图: 想着自己地位低下,也无能力反驳.只好硬着头皮查阅资料来达到他们的想要的 ...

  5. Java从零开始实现导出excel(一)

    Java从零开始实现导出excel(一) java导出excel两种方式 使用easyExcel通过模板导出excel 1.快速创建工程 下面我就直接贴代码 注意事项: 新人博主,随笔记录.主要还是通 ...

  6. POI封装工具easyexcel导出EXCEL表样式设置

    POI封装工具easyexcel导出EXCEL表样式设置 java中对Office操作比较好的工具是POI,但POI在导出数据量较大的情况下很容易因内存占用过大,而出错,阿里巴巴推出的easyexce ...

  7. Java从零开始实现导出excel(三)

    Java从零开始实现导出excel(三) 新人博主,随笔记录.主要还是通过自己日常工作积累,系统整理一些技术.希望能够节省更多人的时间,走出自己的路. 简述 新的一年,先祝各位小伙伴新的一年,事业有成 ...

  8. easyexcel导出excel,大数据量100万以内分页查询zip格式导出

    easyexcel导出excel,大数据量100万以内分页查询zip格式导出 准备工作 整体思路 controller层 service层 mapper层 VO 表结构 测试 备注 easyExcel ...

  9. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

最新文章

  1. EBS   常见的AD命令
  2. python自带模块连接数据库_Python模块Sqlite数据库模块
  3. ElasticSearch技术文档
  4. Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
  5. php学习第一讲----php是什么?
  6. windows下Tomcat详细安装配置教程
  7. java源码之 io 流源码解读(一)
  8. 基于CANdelaStudio制作CDD流程概述
  9. 股票走势图php源码下载,flex实现股票行情走势图示例代码
  10. 中国象棋棋盘java_中国象棋棋子及棋盘的绘制
  11. Cannot lock file hash cache (E:\blackWu\github\X5WebView\WebViewX5\.gradle\4.6\fileHashes) as it has
  12. java如何运行jsp文件_jsp文件怎么打开(java
  13. html用渐变做彩虹,photoshop如何用渐变制作彩虹
  14. 关于TR1900错误的一些解决方法(引用冯哥)
  15. Trying to resize storage that is not resizeable 解决
  16. cad怎么向下位移_CAD偏移快捷键命令(教你怎么绘制滚轮)
  17. 达人评测 锐龙r5 5600h和r5 6600h差别大吗
  18. 用php实现日历输出,php 实现日历
  19. 鸿蒙版微信和安卓版微信一样吗,让微信只支持鸿蒙,放弃安卓?那不是鸿蒙崛起,而是腾讯凉凉...
  20. vue教程 pdf vue权威指南

热门文章

  1. Blink,或是技术社区的突破创新
  2. 怎么买网站服务器,在西部数码买了服务器怎么建网站
  3. Microsoft Edge 内置小游戏的彩蛋
  4. 新媒体音乐,不适合闭目欣赏的前卫艺术_数字体验_新浪博客
  5. 量化投资的现状与前景
  6. 如何通过短信网关发送Wappush消息?
  7. oracle 孙帅_农村居民点空间大数据平台构建方法研究
  8. oracle网络认证,Oracle网络应用开发人员认证简介
  9. 记录小吴的电脑维修记录
  10. Fuzzy C-Means Clustering(模糊C均值)