leftso 7834 0 2018-01-02 20:43:43

文章位置:左搜> 编程技术> 正文

引言

    如同上一篇博客中讲解到的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, "Leftso-" + i, 15 + i, new Date()));
		}
		return list;
	}
}
注意,这里我的文件名是写死的英文不会出现问题。如果你在使用中需要用中文,中文的乱码处理可以参考:Spring mvc文件下载IE/Edge中文乱码解决 

三.演示

启动spring boot项目,并通过浏览器访问http://localhost:8080/export.do
excel文件导出
可以看到文件已经成功下载。接下来打开文件查看:
excel数据查看
可以看数据已经正确的导出。