java编程中通过easypoi导出excel文件并处理导出数据
编程教程
>
Java
(24792)
2024-11-26 14:39:04
引言
如同上一篇博客中讲解到的
java编程使用easypoi将excel文件数据导入一样。数据的导出需求在现在也是比较多的。本文将讲解在java编程中如何通过easypoi来导出数据到excel文件,easypoi这个框架我就这里不在赘述了。
一.环境准备
- jdk 1.8+(由于本博客使用的spring boot框架所以jdk版本偏高,普通项目1.6即可);
- eclipse(由于创建的spring boot项目,eclipse中已经安装spring的插件STS)或者你自己喜欢的java IDE工具
- maven 3+
二.核心编码
由于导出是基于上一个博客导入的项目做的。这里就写几个需要使用到的类,项目的创建依赖的引入请参考我上一篇文章:
java编程中通过easypoi导入excel文件并验证导入数据 2.1 数据模型类user
package net.xqlee.project.demo.pojo;
import java.util.Date;
import javax.validation.constraints.Max;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.NotBlank;
import cn.afterturn.easypoi.excel.annotation.Excel;
public class User {
@Excel(name = "id")
@NotBlank(message = "该字段不能为空")
private String id;
@Excel(name = "姓名")
@Pattern(regexp = "[\\u4E00-\\u9FA5]{2,5}", message = "姓名中文2-5位")
private String name;
@Max(value = 20)
@Excel(name = "年龄")
private Integer age;
@Excel(name = "生日", importFormat = "yyyy-MM-dd")
private Date birthday;
public User() {
}
public User(String id, String name, Integer age, Date birthday) {
super();
this.id = id;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
与前面一篇博客相比。这里只是对user添加了两个构造函数方便后面的造测试数据
2.2导出的controller编写
package net.xqlee.project.demo.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import net.xqlee.project.demo.pojo.User;
/**
* 通过easypoi 导出excel
*
* @author xqlee-mobile
*
*/
@Controller
public class ExcelExportController {
private static final Logger log = LoggerFactory.getLogger(ExcelExportController.class);
@GetMapping("export.do")
public void export(HttpServletResponse response) {
try {
// 设置响应输出的头类型
response.setHeader("content-Type", "application/vnd.ms-excel");
// 下载文件的默认名称
response.setHeader("Content-Disposition", "attachment;filename=user.xls");
// =========easypoi部分
ExportParams exportParams = new ExportParams();
// exportParams.setDataHanlder(null);//和导入一样可以设置一个handler来处理特殊数据
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, User.class, data());
workbook.write(response.getOutputStream());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
/***
* 创建模拟数据
*
* @return
*/
private List<User> data() {
List<User> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(new User("id-" + i, "xqlee-" + i, 15 + i, new Date()));
}
return list;
}
}
注意,这里我的文件名是写死的英文不会出现问题。如果你在使用中需要用中文,中文的乱码处理可以参考:
Spring mvc文件下载IE/Edge中文乱码解决
三.演示
启动spring boot项目,并通过浏览器访问http://localhost:8080/export.do

可以看到文件已经成功下载。接下来打开文件查看:

可以看数据已经正确的导出。
http://blog.xqlee.com/article/329.html