java快速搞定excel导出(easypoi)

一、在pom.xml中添加easypoi的maven依赖

       
            cn.afterturn
            easypoi-base
            3.0.3
        
        
            cn.afterturn
            easypoi-web
            3.0.3
        
        
            cn.afterturn
            easypoi-annotation
            3.0.3
        

二、编写实体类,使用@Excel注解指定要导出的字段

package com.ldy.demo.vo;

import java.io.Serializable;

import org.jeecgframework.poi.excel.annotation.Excel;

public class UserVO implements Serializable {

	private static final long serialVersionUID = -4237467344258292698L;

	// id不导出,不用加@Excel注解
	private Integer id;

	@Excel(name = "姓名")
	private String name;

	@Excel(name = "年龄", type = 10)
	private Integer age;

	@Excel(name = "电话")
	private String phone;

	@Excel(name = "邮箱")
	private String email;

	@Excel(name = "联系地址")
	private String address;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

      @Excel注解参数说明

属性 类型 类型 说明
name String null 列名
needMerge boolean fasle 纵向合并单元格
orderNum String "0" 列的排序,支持name_id
replace String[] {} 值得替换 导出是{a_id,b_id} 导入反过来
savePath String "upload" 导入文件保存路径
type int 1 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本
width double 10 列宽
height double 10 列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意
isStatistics boolean fasle 自动统计数据,在追加一行统计,把所有数据都和输出这个处理会吞没异常,请注意这一点
isHyperlink boolean false 超链接,如果是需要实现接口返回对象
isImportField boolean true 校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_id
exportFormat String "" 导出的时间格式,以这个是否为空来判断是否需要格式化日期
importFormat String "" 导入的时间格式,以这个是否为空来判断是否需要格式化日期
format String "" 时间格式,相当于同时设置了exportFormat 和 importFormat
databaseFormat String "yyyyMMddHHmmss" 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出
numFormat String "" 数字格式化,参数是Pattern,使用的对象是DecimalFormat
imageType int 1 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的
suffix String "" 文字后缀,如% 90 变成90%
isWrap boolean true 是否换行 即支持\n
mergeRely int[] {} 合并单元格依赖关系,比如第二列合并是基于第一列 则{1}就可以了
mergeVertical boolean fasle 纵向合并内容相同的单元格

三、在controller层编写导出excel接口

        @RequestMapping(value = "/exportData", method=RequestMethod.GET)
	@ResponseBody
	public void exportData(HttpServletResponse response) {
                //调用service代码获取用户数据
		List list = userService.getAllUser();
		Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), UserVO.class, list);
		try {
			String name = "用户数据.xls";
			String file_name = new String(name.getBytes("UTF-8"), "ISO-8859-1");
			response.setHeader("Content-Disposition", "attachment;filename=" + file_name);
			workbook.write(response.getOutputStream());
			response.flushBuffer();
			logger.info("用户数据导出成功");
		} catch (IOException e) {
			logger.error("用户数据导出失败,原因:", e);
		} finally {
			try {
				response.getOutputStream().close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

四、在前端页面给导出按钮添加点击事件,执行导出


 五、前端导出的js代码参考如下:

        //导出数据
	function exportData(){
		bootbox.confirm({  
	            title: "请确认",
	            message: "您确定要导出吗",  
	            buttons: {  
		        confirm: {  
		            label: '确定',  
		            className: 'btn blue'  
		        },  
		        cancel: {  
		            label: '取消',  
		            className: 'btn default'  
		        }  
		    },  
		    callback: function(result) {  
		        if(result) {  
		            var url = "${ctx}/user/exportData?tmp=1"
		            window.location.href=url;
		        }
		    }     
		});
	}

 

你可能感兴趣的:(Java)