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 map=(Map)productPrices;
		//System.out.println("size"+map.size());
		ProductExl productExl=null;
		//Set keys = map.keySet();
		for(int i=0;i map = (Map)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

你可能感兴趣的:(java心得,技术总结)