java导出excel封装成工具类

开发一些程序中往往遇到数据导出excel的需求,司空见惯网上很多例子,下面展示一个通用工具类。

ExportExcel.java

package cn.hx.as.util;

import java.io.File;
import java.io.OutputStream;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.lang.reflect.Field;

import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/***

  • @author ardp
    /
    public class ExportExcel {
    /
    **************************************************************************

    • @param fileName

    •        EXCEL文件名称
      
    • @param listTitle

    •        EXCEL文件第一行列标题集合
      
    • @param listContent

    •        EXCEL文件正文数据集合
      
    • @return
      */
      public final static String exportExcel(String fileName, String[] Title,
      Object listContent, HttpServletResponse response,String title,Integer colWidth) {
      String result = “系统提示:Excel文件导出成功!”;
      // 以下开始输出到EXCEL
      try {
      // 定义输出流,以便打开保存对话框______________________begin
      OutputStream os = response.getOutputStream();// 取得输出流
      response.reset();// 清空输出流
      response.setHeader(“Content-disposition”, “attachment; filename=”
      + new String(fileName.getBytes(“GB2312”), “ISO8859-1”));
      // 设定输出文件头
      response.setContentType(“application/msexcel”);// 定义输出类型
      // 定义输出流,以便打开保存对话框_______________________end

       /** **********创建工作簿************ */
       WritableWorkbook workbook = Workbook.createWorkbook(os);
       /** **********创建工作表************ */
      
       WritableSheet sheet = workbook.createSheet("Sheet1", 0);
      
       /** **********设置纵横打印(默认为纵打)、打印纸***************** */
       jxl.SheetSettings sheetset = sheet.getSettings();
       sheetset.setProtected(false);
      
       /** ************设置单元格字体************** */
       WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
       WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,
       		WritableFont.BOLD);
      
       /** ************以下设置三种单元格样式,灵活备用************ */
       // 用于标题居中
       WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
       wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
       wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
       wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
       wcf_center.setWrap(false); // 文字是否换行
      
       // 用于正文居左
       WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
       wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条
       wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
       wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐
       wcf_left.setWrap(true); // 文字是否换行
       /** ***************以下是EXCEL单元格宽度,省略********************* */
       /** ***************以下是EXCEL开头大标题,暂时省略********************* */
        if(colWidth == null){
       	 colWidth=21; 
        }
        sheet.mergeCells(0, 0, colWidth, 0);
        sheet.addCell(new Label(0, 0, title, wcf_center));
       /** ***************以下是EXCEL第一行列标题********************* */
       for (int i = 0; i < Title.length; i++) {
       	sheet.setColumnView(i, Title.length+6);//设置宽度
       	sheet.addCell(new Label(i, 1, Title[i], wcf_center));
       }
       /** ***************以下是EXCEL正文数据********************* */
       Field[] fields = null;
       int i = 2;
       for (Object obj : (List)listContent) {
       	fields = obj.getClass().getDeclaredFields();
       	int j = 0;
       	for (Field v : fields) {
       		v.setAccessible(true);
       		Object va = v.get(obj);
       		if (va == null) {
       			va = "";
       		}
       		SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       		if(va instanceof Timestamp||va instanceof Date){
       			sheet.addCell(new Label(j, i, sf.format(va), wcf_left));
       		}else{
       			sheet.addCell(new Label(j, i, va.toString(), wcf_left));
       			
       		}
      
       		j++;
      
       	}
      
       	i++;
      
       }
      
       /** **********将以上缓存中的内容写到EXCEL文件中******** */
      
       workbook.write();
      
       /** *********关闭文件************* */
      
       workbook.close();
      

      } catch (Exception e) {

       result = "系统提示:Excel文件导出失败,原因:" + e.toString();
      
       System.out.println(result);
      
       e.printStackTrace();
      

      }

      return result;

    }

    /***************************************************************************

    • @param fileName

    •        EXCEL文件名称
      
    • @param listTitle

    •        EXCEL文件第一行列标题集合
      
    • @param listContent

    •        EXCEL文件正文数据集合
      
    • @return
      */
      public final static String exportExcel1(File file,String fileName, String[] Title,
      Object listContent, HttpServletResponse response,String title,Integer colWidth) {
      String result = “系统提示:Excel文件导出成功!”;
      // 以下开始输出到EXCEL
      try {
      // 定义输出流,以便打开保存对话框______________________begin
      OutputStream os = response.getOutputStream();// 取得输出流
      response.reset();// 清空输出流
      response.setHeader(“Content-disposition”, “attachment; filename=”
      + new String(fileName.getBytes(“GB2312”), “ISO8859-1”));
      // 设定输出文件头
      response.setContentType(“application/msexcel”);// 定义输出类型
      // 定义输出流,以便打开保存对话框_______________________end

       /** **********创建工作簿************ */
       WritableWorkbook workbook = Workbook.createWorkbook(file);
      

// WritableWorkbook workbook = Workbook.createWorkbook(os);
/** 创建工作表** */

		WritableSheet sheet = workbook.createSheet("Sheet1", 0);

		/** **********设置纵横打印(默认为纵打)、打印纸***************** */
		jxl.SheetSettings sheetset = sheet.getSettings();
		sheetset.setProtected(false);

		/** ************设置单元格字体************** */
		WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
		WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,
				WritableFont.BOLD);

		/** ************以下设置三种单元格样式,灵活备用************ */
		// 用于标题居中
		WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
		wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
		wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
		wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
		wcf_center.setWrap(false); // 文字是否换行

		// 用于正文居左
		WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
		wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条
		wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
		wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐
		wcf_left.setWrap(true); // 文字是否换行
		/** ***************以下是EXCEL单元格宽度,省略********************* */
		/** ***************以下是EXCEL开头大标题,暂时省略********************* */
		 if(colWidth == null){
			 colWidth=21; 
		 }
		 sheet.mergeCells(0, 0, colWidth, 0);
		 sheet.addCell(new Label(0, 0, title, wcf_center));
		/** ***************以下是EXCEL第一行列标题********************* */
		for (int i = 0; i < Title.length; i++) {
			sheet.setColumnView(i, Title.length+6);//设置宽度
			sheet.addCell(new Label(i, 1, Title[i], wcf_center));
		}
		/** ***************以下是EXCEL正文数据********************* */
		Field[] fields = null;
		int i = 2;
		for (Object obj : (List)listContent) {
			fields = obj.getClass().getDeclaredFields();
			int j = 0;
			for (Field v : fields) {
				v.setAccessible(true);
				Object va = v.get(obj);
				if (va == null) {
					va = "";
				}
				SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				if(va instanceof Timestamp||va instanceof Date){
					sheet.addCell(new Label(j, i, sf.format(va), wcf_left));
				}else{
					sheet.addCell(new Label(j, i, va.toString(), wcf_left));
					
				}

				j++;

			}

			i++;

		}

		/** **********将以上缓存中的内容写到EXCEL文件中******** */

		workbook.write();

		/** *********关闭文件************* */

		workbook.close();

	} catch (Exception e) {

		result = "系统提示:Excel文件导出失败,原因:" + e.toString();

		System.out.println(result);

		e.printStackTrace();

	}

	return result;

}

}

controller控制类或service中调用方式:
public void createProudctPriceExcel(HttpServletRequest request,HttpServletResponse response){
List excellist=new ArrayList();
//Map<String, String> map=(Map<String, String>)productPrices;
//System.out.println(“size”+map.size());
ProductExl productExl=null;
//Set keys = map.keySet();
for(int i=0;i<productPrices.size();i++){
productExl=new ProductExl();
//System.out.println(productPrices.get(i));
Map<String, Object> map = (Map<String, Object>)productPrices.get(i);
Set keys = map.keySet();
for(String key:keys){
if(key.equals(“pname”)){
productExl.setPname(map.get(key).toString());
}
if(key.equals(“total”)){
productExl.setTotal(map.get(key).toString());
}

		}
		excellist.add(productExl);
	}
	String[] Title = { "商品名称","产品总价(单位:元)"};
	ExportExcel.exportExcel(new Date().getTime() + ".xls", Title, excellist,
			response, "商品分类数量报表", 1);
}

所需jar包:jxl-2.6.6.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值