POI导出EXCEL经典实现

1.Apache POI简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能。

2.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格式档案的功能。

3.Busy Developers' Guide to HSSF and XSSF Features

官方网站:http://poi.apache.org/spreadsheet/quick-guide.html

参考博客:http://langhua9527.iteye.com/blog/388005

4.参考实例

引用:http://blog.csdn.net/lenolong/article/details/3957735

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^)

呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI。这里我们用Apache POI!我们先去Apache的大本营下载POI的jar包:http://poi.apache.org/ ,我这里使用的是3.0.2版本。

将3个jar包导入到classpath下,什么?忘了怎么导包?不会吧!好,我们来写一个导出Excel的实用类(所谓实用,是指基本不用怎么修改就可以在实际项目中直接使用的!)。我一直强调做类也好,做方法也好,一定要通用性和灵活性强。下面这个类就算基本贯彻了我的这种思想。那么,熟悉许老师风格的人应该知道,这时候该要甩出一长串代码了。没错,大伙请看:

student.java

package org.leno.export.util; import java.util.Date; public class Student { private long id; private String name; private int age; private boolean sex; private Date birthday; public Student() { super(); // TODO Auto-generated constructor stub } public Student(long id, String name, int age, boolean sex, Date birthday) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; this.birthday = birthday; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean getSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }

Book.java

上面这两个类一目了然,就是两个简单的javabean风格的类。再看下面真正的重点类:

ExportExcel.java

package org.leno.export.util; import java.io.*; import java.lang.reflect.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.text.SimpleDateFormat; import javax.swing.JOptionPane; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFColor; /** * 利用开源组件POI3.0.2动态导出EXCEL文档 转载时请保留以下信息,注明出处! * * @author leno * @version v1.0 * @param * 应用泛型,代表任意一个符合javabean风格的类 * 注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx() * byte[]表jpg格式的图片数据 */ public class ExportExcel { public void exportExcel(Collection dataset, OutputStream out) { exportExcel("测试POI导出EXCEL文档", null, dataset, out, "yyyy-MM-dd"); } public void exportExcel(String[] headers, Collection dataset, OutputStream out) { exportExcel("测试POI导出EXCEL文档", headers, dataset, out, "yyyy-MM-dd"); } public void exportExcel(String[] headers, Collection dataset, OutputStream out, String pattern) { exportExcel("测试POI导出EXCEL文档", headers, dataset, out, pattern); } /** * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * * @param title * 表格标题名 * @param headers * 表格属性列名数组 * @param dataset * 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * @param out * 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * @param pattern * 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ @SuppressWarnings("unchecked") public void exportExcel(String title, String[] headers, Collection dataset, OutputStream out, String pattern) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); // 生成并设置另一个样式 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); style2.setBorderLeft(HSSFCellStyle.BORDER_THIN); style2.setBorderRight(HSSFCellStyle.BORDER_THIN); style2.setBorderTop(HSSFCellStyle.BORDER_THIN); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font2 = workbook.createFont(); font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style2.setFont(font2); // 声明一个画图的顶级管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档 HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 设置注释内容 comment.setString(new HSSFRichTextString("可以在POI中添加注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. comment.setAuthor("leno"); // 产生表格标题行 HSSFRow row = sheet.createRow(0); for (short i = 0; i it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (short i = 0; i ex = 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())); // 测试图书 ExportExcel ex2 = new ExportExcel(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN", "图书出版社", "封面图片" }; List dataset2 = new ArrayList(); try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("book.jpg")); byte[] buf = new byte[bis.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)); dataset2.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("E://a.xls"); OutputStream out2 = new FileOutputStream("E://b.xls"); ex.exportExcel(headers, dataset, out); ex2.exportExcel(headers2, dataset2, out2); out.close(); JOptionPane.showMessageDialog(null, "导出成功!"); System.out.println("excel导出成功!"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:ural 1353. Milliard Vasya's Function
下一篇:抽象工厂(Abstract Factory)
相关文章

绝对经典 C++初学者必看的50个建议

初学者必备:C++经典入门详细教程

经典算法研究系列:十二、快速排序算法

C++经典错误之already defined in

C++经典问题之++/- -

hoj 经典最短路 回家

poj 1182 食物链(经典!种类并查集)

poj2516-经典最小费用最大流-有点难度

C++中经典的单向链表反转

hdu 1043 八数码 经典搜索问题 BF

图文推荐
POI导出EXCEL经典实现
ZOJ 3640 Help Me
POI导出EXCEL经典实现
CF 518C(Anya and
POI导出EXCEL经典实现
hdu 1016 Prime R
UVA - 11987 - A

分类:默认分类 时间:2012-01-04 人气:5
本文关键词:
分享到:

相关文章

  • POI中设置Excel单元格格式 2012-10-05

      POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb.createCellStyle(); 一、设置背景色: setBorder.setFillForegroundColor((short) 13);// 设置背景色 setBorder.setFillPatt

  • java利用poi导出数据到excel 2012-10-22

    背景: 上一篇写到利用jtds连接数据库获取相应的数据,本篇写如何用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** * 将数据导出到excel中 * @param data 将要被导入到excel中的数据 * @throws IOException */ public void crateTempFile(ArrayList> data) throws IOException { //建立一个excel工

  • SpringMVC POI导出EXCEL 2012-11-09

    当今,J2EE企业级开发中SpringMVC无疑占据着举足轻重的地位,而POI又很好的支持了Excel操作,这两者的结合很好的支持了企业级报表系统的开发,废话不多说了,直接进入主题; 1、首先,在项目的lib目录下导入SpringMVC相关的Jar包,同时,导入 2、创建entity对象: package com.entity; import java.io.Serializable; public class PersonEntity implements Serializable { pri

  • java POI实现向Excel中插入图片 2014-05-15

    做Web开发免不了要与Excel打交道。今天老大给我一个任务-导出Excel。开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可。但是有一点不同,就是要加入图片,就是这个加入图片搞了好久。同时网络上确实没有发现比较好的资料,所以写这篇博文记录之,供自己和博友们查询,参考。 在POI中有HSSFPatriarch对象,该对象为画图的顶级管理器,它的createPicture(anchor, pictureIndex)方法就能够在Excel插入一张图片。所以要在Excel中

  • 使用poi读写Excel 2014-06-16

    对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作。 在这里介绍一下我在项目中用到的一个操作Excel的工具——POI。关于POI的一些概念,网络上很多,详细信息大家可以自行百度,我在这里只做简单介绍。POI是apache的类库,主要是为java开发人员提供对Office文件(word、ppt、Excel)处理的支持。我这里主要给出几个例子来说明演示一下。 准备工作 我用的版本是3.10.1,需要的jar有: dom4j.jarlog4j-1.2.13.jarpoi-3.10

  • poi excel自动转换成javabean 支持引用类型属性二级转换 2014-10-28

    最近项目需要使用excel导入功能,导入学生的时候需要指定所在班级,使用excel一次性导入! 将以前的代码改改支持属性内引用类的转换。 测试对象为User对象,javabean结构: private String username; private int id; private String name; private Date birthday; private long height; private double salary; private User user; 使用测试代码: M

  • POJ 2506 Tiling 高精度 2012-01-31

    题目大意:给出一个2*n的条形区域,问用2*1和2*2的方格一共有多少种摆放的方法。 思路:f[i] = f[i - 1] + f[i - 2] * 2 写一个高精度加法就可以了。 CODE: #include #include #include #include #include #define MAX 260 #define BASE 1000 using namespace std; struct BigInt{ int num[MAX],len; BigInt(int _ = 0) {

  • easy ui combotree 取值 2012-02-02

    控件声明 : $("#nscope").combotree({ url:'sysManage/ajaxOrganizeTree.action?orgCode=${userType}', multiple:true }); 取值: 1、 var t = $('#nscope').combotree('tree'); // 获取树对象 var n = t.tree('getChecked'); // 获取选择的节点 var fucku = new Array(); for(var ik=0;ik 2

  • java目录相关操作 示例代码 2012-03-11

    java目录相关操作 示例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 测试 * * @author lenovo * */ //Args:"C:/Users/lenovo/Pictures/screen/*\.jpg" public class DirLi

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.049 (s). 10 q(s)