1、 最近做项目时遇到将数据导出成 excel 的功能,在网上也找了不少资料现在将资料整理如下一来是将来再用时方便,二来是希望对有兴趣的人有所帮助采用的技术是 poi,相关 jar 包可以到 apache 官网找,我这里用的是 3.9 的版本,下载地址如下:http:/www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.9-20121203.zip一下面这个类属于封装类:ExportExcel.java :package com.yutian.lbs.navigation.payment.platform.util;import java
2、.io.IOException;import java.io.OutputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Collection;import java.util.Iterator;import java.util.regex.Matcher;import java.util.regex.Pattern;import mons.lang3.exception.ExceptionUtils;import org.apache.log4j.Logger;imp
3、ort org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFClientAnchor;import org.apache.poi.hssf.usermodel.HSSFPatriarch;import org.apache.poi.hssf.usermodel.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;impo
4、rt org.apache.poi.hssf.usermodel.HSSFWorkbook;/* File Name: ExportExcel.java* Description: 利用开源组件 POI3.0.2动态导出多个 EXCEL 文档 !* Copyright(c) 2010-2013 Inc. All Rights Reserved. * Other: * Date:2013-10-25* Modification Record 1: * * Modified Date:* Version:* Modifier:* Modification Content:* * Modifica
5、tion Record 2:* version 1.0* author LiQing* param * 应用泛型,代表任意一个符合 javabean 风格的类* 注意这里为了简单起见,boolean 型的属性 xxx 的 get 器方式为 getXxx(),而不是 isXxx()* byte表 jpg 格式的图片数据*/public class ExportExcelprivate final static Logger log = Logger.getLogger(ExportExcel.class);/ 声明一个工作薄private static HSSFWorkbook workbook
6、 = null;/ 生成一个表格private static HSSFSheet sheet = null;/ 产生表格标题行private static HSSFRow row = null;/ 声明一个画图的顶级管理器private static HSSFPatriarch patriarch = null;/定义一个 excel 所容纳的初始数据量 (防止数据过多,因为一个 excel 表格最多只能存65535 行记录(excel2003的),所以这里取40000private static Integer initial_data = 40000;/累计遍历的数量,用来判断是否超过初始
7、数据,如果超过则新建一个 sheetprivate int length = 0;public void exportExcel(String headerName,Collection dataset, OutputStream out) exportExcel(headerName, null, dataset, out, “yyyy-MM-dd“);public void exportExcel(String headerName,String headers, Collection dataset,OutputStream out) exportExcel(headerName, he
8、aders, dataset, out, “yyyy-MM-dd“);/* 这是一个通用的方法,利用了 JAVA 的反射机制,可以将放置在 JAVA 集合中并且符号一定条件的数据以 EXCEL 的形式输出到指定 IO 设备上* * param title* 表格标题名* param headers* 表格属性列名数组* param dataset* 需要显示的数据集合,集合中一定要放置符合 javabean 风格的类的对象。此方法支持的* javabean 属性的数据类型有基本数据类型及 String,Date,byte(图片数据)* param out* 与输出设备关联的流对象,可以将 EX
9、CEL 文档导出到本地文件或者网络中* param pattern* 如果有时间数据,设定输出格式。默认为“yyy-MM-dd“*/SuppressWarnings(“unchecked“)public void exportExcel(String title, String headers,Collection dataset, OutputStream out, String pattern) workbook = new HSSFWorkbook();sheet = workbook.createSheet(title);/ 设置表格默认列宽度为15个字节sheet.setDefaul
10、tColumnWidth(15);row = sheet.createRow(0);for (int i = 0; i it = dataset.iterator();int index = 0;while (it.hasNext() index+;length+;row = sheet.createRow(index);T t = (T) it.next();/ 利用反射,根据 javabean 属性的先后顺序,动态调用 getXxx()方法得到属性值Field fields = t.getClass().getDeclaredFields();for (int i = 0; i ex =
11、new ExportExcel();String headers = “学号“ , “姓名“, “年龄“, “性别 “, “出生日期“ ;List dataset = new ArrayList();dataset.add(new Student(10000001, “张三“, 20, true, new Date();dataset.add(new Student(20000002, “李四“, 24, false, new Date();dataset.add(new Student(30000003, “王五“, 22, true, new Date();/ 测试图书ExportExce
12、l ex2 = new ExportExcel();String headers2 = “图书编号“, “图书名称 “, “图书作者“, “图书价格“ , “图书ISBN“,“图书出版社 “, “封面图片“ ;List dataset2 = new ArrayList();try BufferedInputStream bis = new BufferedInputStream(new FileInputStream(“src/test/java/com/yutian/lbs/navigation/payment/platform/test/ExportExcel/book.jpg“);byt
13、e buf = new bytebis.available();while (bis.read(buf) != -1) /dataset2.add(new Book(1, “jsp“, “leno“, 300.33f, “1234567“,“清华出版社 “, buf);dataset2.add(new Book(2, “java 编程思想“ , “brucl“, 300.33f, “1234567“,“阳光出版社 “, buf);dataset2.add(new Book(3, “DOM 艺术“, “lenotang“, 300.33f, “1234567“,“清华出版社 “, buf);da
14、taset2.add(new Book(4, “c+经典“ , “leno“, 400.33f, “1234567“,“清华出版社 “, buf);dataset2.add(new Book(5, “c#入门“, “leno“, 300.33f, “1234567“,“汤春秀出版社 “, buf);OutputStream out = new FileOutputStream(“H:/a.xls“);OutputStream out2 = new FileOutputStream(“H:/b.xls“);ex.exportExcel(“dfd“, headers, dataset, out);
15、ex2.exportExcel(“fdsf“, headers2, dataset2, out2);out.close();JOptionPane.showMessageDialog(null, “导出成功!“ );System.out.println(“excel 导出成功!“ ); catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();二(1)这里有个 book.jpg 图片,只需找个比较小的图片放在相应的目录下三,测试绝对通过,不信自己试试