java POI导出excel

一、Apache POI简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。

二、POI结构

  • HSSF - 提供读写Microsoft Excel XLS格式档案的功能。

  • XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。

  • HWPF - 提供读写Microsoft Word DOC格式档案的功能。

  • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

  • HDGF - 提供读Microsoft Visio格式档案的功能。

  • HPBF - 提供读Microsoft Publisher格式档案的功能。

  • HSMF - 提供读Microsoft Outlook格式档案的功能。

三、参考案例

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里介绍下excel的导出。

1、excel表动态设置标题以及内容

package com.xxx.xxx;

import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;


public class ObjectExcelView extends AbstractExcelView{

	@SuppressWarnings("unchecked")
	@Override
	protected void buildExcelDocument(Map<String, Object> model,
			HSSFWorkbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		Date date = new Date();
		String filename = Tools.date2Str(date, "yyyyMMddHHmmss");
		HSSFSheet sheet;
		HSSFCell cell;
		 
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment;filename=" + model.get("preFilename") + filename+".xls");
		sheet = workbook.createSheet("sheet1");
		
		List<String> titles = (List<String>) model.get("titles");
		int len = titles.size();
		HSSFCellStyle headerStyle = workbook.createCellStyle(); //标题样式
		headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		HSSFFont headerFont = workbook.createFont();	//标题字体
		headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		headerFont.setFontHeightInPoints((short)11);
		headerStyle.setFont(headerFont);
		short width = 20,height=25*20;
		sheet.setDefaultColumnWidth(width);
		for(int i=0; i<len; i++){ //设置标题
			String title = titles.get(i);
			cell = getCell(sheet, 0, i);
			cell.setCellStyle(headerStyle);
			setText(cell,title);
		}
		sheet.getRow(0).setHeight(height);
		
		HSSFCellStyle contentStyle = workbook.createCellStyle(); //内容样式
		contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		
		List<HashMap> varList = (List<HashMap>) model.get("varList");
		int varCount = varList.size();
		for(int i=0; i<varCount; i++){
			HashMap vpd = varList.get(i);
			for(int j=0;j<len;j++){
				String varstr = vpd.get("var"+(j+1)) != null ? vpd.get("var"+(j+1)).toString() : "";
				cell = getCell(sheet, i+1, j);
				cell.setCellStyle(contentStyle);
				setText(cell,varstr);
			}
			
		}
		
	}

}

2、导出excel接口

//导出excel
    @RequestMapping("/excel/{beginDate}/{endDate}/{dwei_name}/{xming}")
    @ResponseBody
    public ModelAndView exportExcel(@PathVariable String beginDate, @PathVariable String endDate, @PathVariable String dwei_name,@PathVariable String xming){
        ModelAndView mv = new ModelAndView();
        PageData params=new PageData();
        //当dwei_name或xming字段传值为*时,表示dwei_name或者xming是任意值
        if(dwei_name.equals("*")){
            dwei_name=null;
        }
        if(xming.equals("*")){
            xming=null;
        }
        params.put("beginDate",beginDate);
        params.put("endDate",endDate);
        params.put("xming",xming);
        params.put("dwei_name",dwei_name);
        try{
            Map<String,Object> dataMap = new HashMap<String,Object>();
            List<String> titles = new ArrayList<String>();
            titles.add("姓名");	//2
            titles.add("性别");	//3
            titles.add("单位名称");	//4
            titles.add("职务");	//5
            titles.add("出勤次数");	//7
            titles.add("缺勤次数");	//8
            dataMap.put("titles", titles);
            List<AttendanceResult> varOList = query(params);
            List<PageData> varList = new ArrayList<PageData>();
            for(int i=0;i<varOList.size();i++){
                PageData vpd = new PageData();
                vpd.put("var2", varOList.get(i).getXming());
                vpd.put("var3", varOList.get(i).getXbie());
                vpd.put("var4", varOList.get(i).getDwei_name());
                vpd.put("var5", varOList.get(i).getZwu());
                vpd.put("var7", varOList.get(i).getSum_cqtimes());
                vpd.put("var8", varOList.get(i).getSum_qqtimes());
                varList.add(vpd);
            }
            dataMap.put("varList", varList);
            dataMap.put("preFilename", "attendance");	//文档名称
            ObjectExcelView erv = new ObjectExcelView();
            mv = new ModelAndView(erv,dataMap);
        } catch(Exception e){
            logger.error(e.toString(), e);
        }
        return mv;
    }

参考文档:

官方网站:

http://poi.apache.org/spreadsheet/quick-guide.html

参考博客:

http://langhua9527.iteye.com/blog/388005

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值