java导出excel封装成工具类

来源:互联网 发布:淘宝没有访客怎么办 编辑:程序博客网 时间:2024/05/21 16:42

开发一些程序中往往遇到数据导出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文件导出成功!";// 以下开始输出到EXCELtry {// 定义输出流,以便打开保存对话框______________________beginOutputStream 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文件导出成功!";// 以下开始输出到EXCELtry {// 定义输出流,以便打开保存对话框______________________beginOutputStream 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<ProductExl> excellist=new ArrayList<ProductExl>();//Map<String, String> map=(Map<String, String>)productPrices;//System.out.println("size"+map.size());ProductExl productExl=null;//Set<String> 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<String> 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

原创粉丝点击