HuTool工具类使用之Excel文档的导入导出

前言

在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel导入导出功能,可以大幅度减少今后开发中Excel的导入导出的相关操作。

提示:以下是本篇文章正文内容,下面案例可供参考

一、Hutool是什么?

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

二、导出Excel文件

1.引入相关依赖

Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库,Hutool默认不引入。

需要注意的是,hutool-4.x的poi-ooxml 版本需高于 3.17,hutool-5.x的poi-ooxml 版本需高于 4.1.2;本文使用的依赖信息如下图所示:

cn.hutool

hutool-all

5.4.3

org.apache.poi

poi-ooxml

4.1.2

2.Excel导出功能的实现

Hutool将Excel写出封装为ExcelWriter,原理为包装了Workbook对象,每次调用merge(合并单元格)或者write(写出数据)方法后只是将数据写入到Workbook,并不写出文件,只有调用flush或者close方法后才会真正写出文件。由于机制原因,在写出结束后需要关闭ExcelWriter对象,调用close方法即可关闭,此时才会释放Workbook对象资源,否则带有数据的Workbook一直会常驻内存。代码如下所示:

@RequestMapping(EXCEL_DOWNLOAD)

public void excelExport(HttpServletResponse httpServletResponse) throws IOException {

UserDTO userDTO = new UserDTO();

List userDTOS = userService.selectUserDOBatch(userDTO);

//通过hutool工具创建的excel的writer,默认为xls格式

ExcelWriter writer = ExcelUtil.getWriter();

//设置要导出到的sheet

writer.setSheet("表2");

writer.setSheet("表3");

//自定义excel标题和列名

writer.addHeaderAlias("id","用户ID");

writer.addHeaderAlias("userName","用户名");

writer.addHeaderAlias("loginPassword","密码");

writer.addHeaderAlias("email","邮箱");

writer.addHeaderAlias("createDate","数据创建日期");

//合并单元格后的标题行,使用默认标题样式

writer.merge(4,"用户基本信息表");

writer.renameSheet(0,"用户登录信息");

//一次性写出内容,使用默认样式,强制输出标题

writer.write(userDTOS,true);

httpServletResponse.setContentType("application/vnd.ms-excel;charset=utf-8");

//name是下载对话框的名称,不支持中文,想用中文名称需要进行utf8编码

String excelName = "用户基本信息表";

//excelName = new String(excelName.getBytes(),"utf-8");

excelName = URLEncoder.encode(excelName, "utf-8");

httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + excelName +".xls");

//将excel文件信息写入输出流,返回给调用者

ServletOutputStream excelOut = null;

try {

excelOut = httpServletResponse.getOutputStream();

writer.flush(excelOut,true);

} catch (IOException e) {

e.printStackTrace();

}finally {

writer.close();

}

IoUtil.close(excelOut);

}

以上导出的Excel格式为.xls,如果想要导出格式为.xlsx的excel文件,只需修改上图所示的相应位置代码即可,修改代码为:

//设置返回excel的格式为xlsx

httpServletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");

httpServletResponse.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("用户信息表","utf-8") + ".xlsx");

生成的excel文件如下如所示:

二、导出Excel文件

1.Excel读取-ExcelReader

Excel文件的导入分为三种情况:

1.读取Excel中所有行和列,都用列表表示

ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");

List> readAll = reader.read();

2.读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。

ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");

List> readAll = reader.readAll();

3.读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值。

ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");

List all = reader.readAll(Person.class);

本文Excel导入读取示例采用的是第三种方法实现,相关代码如下所示:

@RequestMapping(READ_EXCEL)

public void readExcel(){

ExcelReader reader = ExcelUtil.getReader("H:\\user.xlsx");

List userDTOS = reader.readAll(UserDTO.class);

//日志输出读取到的信息

log.info(userDTOS.toString());

}

其中UserDTO类的代码如下所示:

@Data

public class UserDTO {

@NotNull(message = "用户id不能为空")

private Integer id;

@NotNull(message = "用户名不能为空")

@Size(min = 4, max = 16, message = "用户名长度错误")

private String userName;

@NotNull(message = "密码不能为空")

@Size(min = 4, max = 16, message = "密码长度错误")

private String loginPassword;

@NotNull(message = "邮箱不能为空")

@Email(message = "邮箱格式错误")

private String email;

@NotNull(message = "日期不能为空")

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

@JSONField(format = "yyyy-MM-dd HH:mm:ss")

private Date createDate;

}

hutool 自定义excel_HuTool工具类使用之Excel文档的导入导出相关推荐

  1. hutool导出excel大数据_HuTool工具类使用之Excel文档的导入导出

    HuTool工具类使用之Excel文档的导入导出 前言 在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel ...

  2. easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  3. easyexcel多个sheet导入_Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  4. mac如何用python打开excel,Mac——利用Python读取与写入Excel文档

    Mac--利用Python读取与写入Excel文档 目的:按照自定义的格式写入或读取Excel文档,如标红加粗等 Python代码: import xlwt import pandas as pd d ...

  5. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  6. 自定义日期工具类 java 1614698552

    自定义日期工具类 java 1614698552 需求 思路 演练 日期转字符串的方法 字符串转日期方法 测试类 更多尝试 测试另一个方法

  7. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现

    安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...

  8. 自定义反序列化工具类

    自定义反序列化工具类 在实体类中实现了 implements Serializable 序列化 还实现了 UserDetails 对传入的字段 authorities 返序列化失败 对字段 autho ...

  9. hutool中Convert工具类的常用方法

    hutool中Convert工具类的常用方法 方法都是public static,以下省略不写. 1.String numberToChinese(double number, boolean isU ...

最新文章

  1. 每天学习Linux(3)---pwd命令
  2. 【转】后勤常用查询报告
  3. 使用bash上传项目到osc@git上
  4. python 日期格式校验_python – 如何验证时间格式?
  5. java date 日期部分_Java处理Date时间格式的各种场景工具类(二)
  6. 虚拟机配置centos7.5网卡网络
  7. Win7重装后修复Ubuntu引导项
  8. matlab解决线性规划问题
  9. UE4蓝图基础02-节点的基本知识
  10. border属性的三要素
  11. 服务器u单核性能排行,CPU单核性能排行[2018年10月更新]
  12. 了解 React 之 Suspense 和 lazy
  13. 力扣刷题思考:347. 前 K 个高频元素
  14. 百度网盘 linux 上传文件大小限制,Linux 下载百度网盘大文件的方法
  15. 海康摄像头SDK抓图计划
  16. 自编记单词小程序项目(自定义词库,多功能)C/C++语言实现
  17. [译]不再对 MVVM 感到绝望
  18. 为什么我们需要关注基于 EIP-3664 标准的可拆分,可组合的NFT?
  19. python 暴力破解密码
  20. 如何查看一个网站上的图片等内容有没有放在CDN上

热门文章

  1. MongoDB聚合(一)
  2. 管理学理论(SWOT分析等八种理论)
  3. 二本渣渣的我有幸通过简历,五轮面试,成功拿到阿里P6的offer!
  4. 海康工业相机拍照存图控制台demo
  5. hadoop-API视频配套操作源码
  6. 鸢尾花完整的python代码knn_knn实现鸢尾花分类
  7. WPF关于绑定与更新修改
  8. 优惠券项目---------------第十三章
  9. 如何评审一篇英文论文
  10. 百度网盘目录管理系统