用POI将Mysql数据导入到Excel中去

用POI将Mysql数据导入到Excel中去,第1张

在我们实际的开发中 表现层的解决方案虽然有多样 但是IE浏览器已成为最多人使用的浏览器 因为大家都用Windows 在企业办公系统中 常常有客户这样子要求 你要把我们的报表直接用Excel打开 或者是 我们已经习惯用Excel打印 这样子如果开发是没有问题的用来进行这些数据导入导出支持的都是很好 如果你使用的是SQL Server数据库那就更方便了 笔者也曾体会开发这些功能的方便性 但是有j ee这个更有前途的开放式的开发环境 难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键数据的处理有时候不能在客户端做 第 种方案的问题是牺牲了代码的可移植性和稳定性 如果让客户端只负责处理生成好的报表 那将是一种诱人的选择

Apache的Jakata项目的POI子项目 目标是处理ole 对象 目前比较成熟的是HSSF接口 处理MS Excel( )对象 它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西 而是真正的Excel对象 你可以控制一些属性如sheet cell等等 这是一个年轻的项目 所以象HDF这样直接支持Word对象的好东西仍然在设计中 其它支持word格式的纯java方案还有itext 不过也是仍在奋斗中 但是HSSF已经成熟到能够和足够我们使用了 另外 无锡永中Office的实现方案也是纯java的解决方案 不过那也是完全商业的产品 并不是公开代码项目 其实 从开发历史的角度讲 在 年代中期starOffice的原作者在德国成立了StarOffice suite公司 然后到 年夏天starOffice被sun收购 再到 年 月starOffice 的发布 并且从starOffice 开始 starOffice建立在OpenOffice的api的基础上 这个公开代码的office项目已经进行了很长的时间 虽然那是由C++写的 但是POI的代码部分也是由openOffice改过来的 所以 应该对POI充满足够的信心 国内已经有部分公司在他们的办公自动化等Web项目中使用poi了 如日恒的ioffice 海泰的HTOffice等

java当初把核心处理设成Unicode 带来的好处是另代码适应了多语言环境 然而由于老外的英语只有 个字母 有些情况下 一些程序员用 位的byte处理 一不小心就去掉了CJK的高位 或者是由于习惯在程序中采用硬编码 还有多种原因 使得许多java应用在CJK的处理上很烦恼 还好在POI HSSF中考虑到这个问题 可以设置encoding为双字节

POI可以到下载到 编译好的jar主要有这样 个 poi包 poi Browser包 poi hdf包 poi hssf例程包 实际运行时 需要有poi包就可以了 如果用Jakarta ant编译和运行 下载apache Jakarta POI的release中的src包 它里面已经为你生成好了build文件了 只要运行ant就可以了(ant 的安装和使用在此不说了) 如果是用Jbuilder 运行 请在新建的项目中加入poi包 以Jbuilder 为例 选择Tools菜单项的config libraries 选项 新建一个lib 在d出的菜单中选择poi包 如这个jakarta poi final jar 把poi添加到jbuilder中 然后 右键点击你的项目 在project的properties菜单中path的required Libraries中 点add 添加刚才加入到jbuilder中的poi到你现在的项目中 如果你仅仅是为了熟悉POI hssf的使用 可以直接看POI的samples包中的源代码 并且运行它 hssf的各种对象都有例程的介绍 hssf提供的例程在 apache poi hssf usermodel examples包中 共有 个 生成的目标xls都是workbook xls 如果你想看更多的例程 可以参考hssf的Junit test cases 在poi的包的源代码中有 hssf都有测试代码

首先 到上去下载POI 登录到该网址以后 选择红 *** 域的poi bin final zip来下载

下载以后解压 解压目录为

在Eclipse中设置对poi bin final jar的库引用

在Eclipse中新建一个名字叫POIExcel的Java工程 右键POIExcel项目的项目名 选择Build Path 再选择Add External Archives 然后找到poi bin final jar这个包将其引进到工程中来

Excel 结构            HSSFWorkbook excell 文档对象介绍            HSSFSheet excell的表单            HSSFRow excell的行            HSSFCell excell的格子单元            HSSFFont excell字体            HSSFName 名称            HSSFDataFormat 日期格式            辅助 *** 作包括            HSSFDateUtil 日期            HSSFPrintSetup 打印            HSSFErrorConstants 错误信息表

将数据导出到Excel中的实例

创建一个空白的Excel文件

我们创建一个最普通的Java应用程序即可 程序代码如下:          HSSFWorkbook wb=new HSSFWorkbook()        FileOutputStream fileout = new FileOutputStream( C:\\test xls )        wb write(fileout)        fileout close()

FileOutputStream属于JDK的数据流对象 通过它来将一个名为test xls文件创建在C盘根目录下 运行该程序后可以看到在C盘上的根目录上多了一个Excel文件

如果将程序中的FileOutputStream( C:\\test xls )的参数改为 test xls 则文件就会创建在该项目的根目录下

往Excel的单元格中写入信息

POI把Excel分解成几个对象 自顶向下的关系是:工作薄(HSSFWorkbook) >表格(HSSFSheet) >表格行(HSSFRow) >单元格(HSSFCell) 将数据库中表的数据导入到Excel中 首先我们要将数据库中的表的数据查询出来 这里我们通过Hibernate来将数据库中addres *** ook_table表的数据查询出来 然后通过循环将表中的数据导入到Excel中去

HSSFWorkbook wb=new HSSFWorkbook()        HSSFSheet sheet=wb createSheet( new sheet )        try {        //通过Hibernate来查询addres *** ook_table表中的数据 将其存储在List中            Transaction tx = session beginTransaction()            hibernate Query query= session createQuery( from Addres *** ookTable )            List list = query list()            mit()            int k =         //创建表格 创建表格行和单元格 将数据库中表的字段存储在单元格中             for(Iterator it=erator()it hasNext()){                Addres *** ookTable user =(Addres *** ookTable)it next()                HSSFRow row=sheet createRow((short)k)                row createCell((short) ) setCellValue(user getId())                row createCell((short) ) setCellValue(user getName())                row createCell((short) ) setCellValue(user getAddress())                row createCell((short) ) setCellValue(user getPhone())                k++            }            FileOutputStream fileout = new FileOutputStream( C:\\test xls )            wb write(fileout)            fileout close()            log error( Successful!! )            } catch (HibernateException e) {                log error( Insert Exception! )                e printStackTrace()            }

lishixinzhi/Article/program/Oracle/201311/17278

多表关联导出,简单介绍:有A1表,A2表,B表,C表,A1和A2是一对多的关系,B表和A1表也是一对多的关系,C表和B表是一对多的关系。这是简化的业务逻辑,表之间的关系就类似这种。完成对关联导出。

熟悉poi导出的可能会知道,报表的导出总体思路是将数据按照excel的每一行去写入数据的,假如是有序的数据还好说点,比如单表的导出,直接单表查询出来,循环写入每一个excel行就行,这种做法很简单。但是假如遇到一对多的表关联数据呢?更复杂一点的就是一对多对多,每一行都要根据数据来变化结构。

这种复杂逻辑我真的没有什么特别好的方法来解决,只能将这些逻辑拆分,将所有数据都查询出来,然后按照每一个一个多关系拆分,利用stream表达式进行快速筛选,完成数据的重组,写入excel中。

项目功能里要求能够将展示的报表导出excel,因为报表的数据都是动态从list传进来的,所以使用了POI技术来动态构建excel文件。

百科里说POI是介个样子的

“ApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对MicrosoftOffice格式档案读和写的功能”

简单来说就是通过它的API可以进行创建/读取文档,sheet,行列单元格等 *** 作,也可以设置文档的各个样式。

刚接触这个任务的时候查了很多资料,最后主要是参考了这篇文章,程序复制粘贴就跑得通,对POI的整个理解可以得到很好地提升。

详解JAVA POI导出EXCEL报表的 *** 作(包括各种格式及样式的实现)

然后参考着就实现了项目里要求的样子啦

=======================================================

百科中的示例附上作为下次使用的备忘。

创建Excel 文档

示例1将演示如何利用Jakarta POI API 创建Excel 文档。

示例1程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook

import org.apache.poi.hssf.usermodel.HSSFSheet

import org.apache.poi.hssf.usermodel.HSSFRow

import org.apache.poi.hssf.usermodel.HSSFCell

import java .io.FileOutputStream

public class CreateXL {

/** Excel 文件要存放的位置,假定在D盘下*/

public static String outputFile="D:\test.xls"

public static void main(String argv[]){

try{

// 创建新的Excel 工作簿

HSSFWorkbook workbook = new HSSFWorkbook()

// 在Excel工作簿中建一工作表,其名为缺省值

// 如要新建一名为"效益指标"的工作表,其语句为:

// HSSFSheet sheet = workbook.createSheet("效益指标")

HSSFSheet sheet = workbook.createSheet()

// 在索引0的位置创建行(最顶端的行)

HSSFRow row = sheet.createRow((short)0)

//在索引0的位置创建单元格(左上端)

HSSFCell cell = row.createCell((short) 0)

// 定义单元格为字符串类型

cell.setCellType(HSSFCell.CELL_TYPE_STRING)

// 在单元格中输入一些内容

cell.setCellValue("增加值")

// 新建一输出文件流

FileOutputStream fOut = new FileOutputStream(outputFile)

// 把相应的Excel 工作簿存盘

workbook.write(fOut)

fOut.flush()

// *** 作结束,关闭文件

fOut.close()

System.out.println("文件生成...")

}catch(Exception e) {

System.out.println("已运行 xlCreate() : " + e )

}

}

}

读取Excel文档中的数据

示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为test1.xls的Excel文件。

示例2程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook

import org.apache.poi.hssf.usermodel.HSSFSheet

import org.apache.poi.hssf.usermodel.HSSFRow

import org.apache.poi.hssf.usermodel.HSSFCell

import java .io.FileInputStream

public class ReadXL {

/** Excel文件的存放位置。注意是正斜线*/

public static String fileToBeRead="D:\test1.xls"

public static void main(String argv[]){

try{

// 创建对Excel工作簿文件的引用

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead))

// 创建对工作表的引用。

// 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")

HSSFSheet sheet = workbook.getSheet("Sheet1")

// 也可用getSheetAt(int index)按索引引用,

// 在Excel文档中,第一张工作表的缺省索引是0,

// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0)

// 读取左上端单元

HSSFRow row = sheet.getRow(0)

HSSFCell cell = row.getCell((short)0)

// 输出单元内容,cell.getStringCellValue()就是取所在单元的值

System.out.println("左上端单元是: " + cell.getStringCellValue())

}catch(Exception e) {

System.out.println("已运行xlRead() : " + e )

}

}

}

设置单元格格式

在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置 字体和单元格的格式,然后再应用这些格式:

1、创建字体,设置其为红色、粗体:

HSSFFont font = workbook.createFont()

font.setColor(HSSFFont.COLOR_RED)

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD)

2、创建格式

HSSFCellStyle cellStyle= workbook.createCellStyle()

cellStyle.setFont(font)

3、应用格式

HSSFCell cell = row.createCell((short) 0)

cell.setCellStyle(cellStyle)

cell.setCellType(HSSFCell.CELL_TYPE_STRING)

cell.setCellValue("标题 ")

处理WORD文档

import java .io.*

import org.apache.poi.hwpf.extractor.WordExtractor

import org.apache.poi.hssf.usermodel.HSSFWorkbook

import org.apache.poi.hssf.usermodel.HSSFSheet

import org.apache.poi.hssf.usermodel.HSSFRow

import org.apache.poi.hssf.usermodel.HSSFCell

public class TestPoi {

public TestPoi() {

}

public static void main(String args[]) throws Exception

{

FileInputStream in = new FileInputStream ("D:\a.doc")

WordExtractor extractor = new WordExtractor()

String str = extractor.extractText(in)

//System.out.println("the result length is"+str.length())

System.out.println(str)

}

}

搜集链接 方便以后查阅

POI *** 作Excel常用方法总结

自己封装的poi *** 作excel工具类


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9988452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存