通常在Java Web的项目中,我们会有导出数据的需求。因此,在这里我就通过一个简单的小Demo来演示一下如何通过Java的Hutool工具来将页面数据导出为excel。
1、Hutool工具介绍
Hutool是一个小而全的Java工具类库,它通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。Hutool涵盖了Java开发底层代码中的各个方面,是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
2、项目环境搭建
开发工具 | IntelliJ IDEA |
框架 | Spring + Spreing MVC + MyBatis |
数据库 | MySQL 5.6 |
前端 | Bootstrap |
3、Hutool的使用
Hutool的使用步骤主要分为以下几个步骤:
(1)在pom.xml中引入依赖包。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
(2)在控制层使用Hutool。
@RequestMapping("/export")
public void export(HttpServletResponse response) throws UnsupportedEncodingException {
//从数据库中查询到数据
List<User> userList = exportService.findAll();
// 通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
//自定义标题别名
writer.addHeaderAlias("id", "序号");
writer.addHeaderAlias("username", "姓名");
writer.addHeaderAlias("address", "地址");
writer.addHeaderAlias("age", "年龄");
// 合并单元格后的标题行,使用默认标题样式
writer.merge(3, "人员信息");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(userList, true);
//out为OutputStream,需要写出到的目标流
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//dateString.xls是弹出下载对话框的文件名,用日期作为文件名称
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
response.setHeader("Content-Disposition","attachment;filename="+dateString+".xls");
ServletOutputStream out= null;
try {
out = response.getOutputStream();
writer.flush(out, true);
}
catch (IOException e) {
e.printStackTrace();
}
finally {
// 关闭writer,释放内存
writer.close();
}
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
4、效果演示
(1)启动项目,点击按钮,跳转到用户信息页面。
(2)点击导出,下载文件。
文件内容如下:
5、项目源码