基于poi的excel导出封装

基于poi的excel导出封装

之前我所过的项目中,进行excel导出时,无一例外地都是先读取excel模板,然后再导出excel,修改导出这块的时候,代码和excel模板都得修改,使用起来感觉很麻烦;
还有,如果我要在一个sheet中导出用户数据和省份数据时,后端实现起来也很复杂。

我对基于poi导出excel进行了封装,现在贴出来,与大家交流交流。

主要名词解释:

ExcelModel:excel数据封装类。
Sheet:一个工作表。
Block:一个块,一个工作表可以包含多个块。

先看效果图:
图1
图2
图3
以下是示例代码:

package com.excel.controller;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.excel.service.ExportService;
import com.excel.util.ExcelUtil;
import com.excel.util.excel.part.Block;
import com.excel.util.excel.part.ExcelModel;
import com.excel.util.excel.part.Sheet;

@Controller
public class ExporController {
	
	@Autowired
	ExportService exportService;
	
	@RequestMapping(value = "/export")
    public void export(HttpServletResponse response){
		ExcelModel em=exportService.getExcelModel();
		ExcelUtil.exportXlsx(em, response);
	}
	
	@RequestMapping(value = "/export2")
    public void export2(@RequestParam Map<String, Object> params,HttpServletResponse response){
    	ExcelModel em=new ExcelModel("导出测试");

    	//------工作表1
    	Sheet sheet1 = em.createSheet("用户和省份");
    	sheet1.setBlockSpace(3);//设置block的间隔
    	
    	List<Map<String,Object>> userList = exportService.getUserList(params);
    	Block block1 = sheet1.createBlock();
    	block1.setHeader("名字","手机号","身份证","邮箱");//设置表头
    	block1.setHeaderKeys("name","phonenumber","idcard","email");//设置表头对应的key
    	block1.setData(userList);
    	
    	List<Map<String,Object>> provinceList = exportService.getProvinceList(params);
    	Block block2 = sheet1.createBlock();
    	block2.setHeader("省市编号","省份名称");
    	block2.setHeaderKeys("code","name");
    	block2.setData(provinceList);
    	block2.setShowRowNo(true);//控制是否显示序号
    	
    	//------工作表2
    	Sheet sheet2 = em.createSheet("省份");
    	Block block3 = sheet2.createBlock();
    	block3.setTitle("标题");
    	block3.setHeader("省市编号","省份名称");
    	block3.setHeaderKeys("code","name");
    	block3.setData(provinceList);
    	
    	ExcelUtil.exportXlsx(em, response);
	}
}

注意:

导出时调用ExcelUtil.exportXlsx(excelModel, httpServletResponse);
不建议使用ExcelUtil.export(excelModel, httpServletResponse),行数超过65535时会报错。

github源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值