数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

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


发布日期:2023年02月16日
 
用POI将Mysql数据导入到Excel中去

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

Apache的Jakata项目的POI子项目目标是处理ole对象目前比较成熟的是HSSF接口处理MS Excel()对象它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西而是真正的Excel对象你可以控制一些属性如sheetcell等等这是一个年轻的项目所以象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在弹出的菜单中选择poi包如这个jakartapoifinaljar把poi添加到jbuilder中然后右键点击你的项目在project的properties菜单中path的required Libraries中点add添加刚才加入到jbuilder中的poi到你现在的项目中如果你仅仅是为了熟悉POI hssf的使用可以直接看POI的samples包中的源代码并且运行它hssf的各种对象都有例程的介绍hssf提供的例程在orgapachepoihssfusermodelexamples包中共有生成的目标xls都是workbookxls如果你想看更多的例程可以参考hssf的Junit test cases在poi的包的源代码中有hssf都有测试代码

首先到上去下载POI登录到该网址以后选择红色区域的poibinfinalzip来下载

下载以后解压解压目录为

在Eclipse中设置对poibinfinaljar的库引用

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

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:\\testxls);

wbwrite(fileout);

fileoutclose();

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

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

往Excel的单元格中写入信息

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

HSSFWorkbook wb=new HSSFWorkbook();

HSSFSheet sheet=wbcreateSheet(new sheet);

try {

//通过Hibernate来查询addressbook_table表中的数据将其存储在List中

Transaction tx = sessionbeginTransaction();

orghibernateQuery query= sessioncreateQuery(from AddressbookTable);

List list = querylist();

mit();

int k =;

//创建表格创建表格行和单元格将数据库中表的字段存储在单元格中

for(Iterator it=erator();ithasNext();){

AddressbookTable user =(AddressbookTable)itnext();

HSSFRow row=sheetcreateRow((short)k);

rowcreateCell((short))setCellValue(usergetId());

rowcreateCell((short))setCellValue(usergetName());

rowcreateCell((short))setCellValue(usergetAddress());

rowcreateCell((short))setCellValue(usergetPhone());

k++;

}

FileOutputStream fileout = new FileOutputStream(C:\\testxls);

wbwrite(fileout);

fileoutclose();

logerror(Successful!!);

} catch (HibernateException e) {

logerror(Insert Exception!);

eprintStackTrace();

}

上一篇:windows优化系统后oracle9i本地连接失败

下一篇:Oracle 9i 分析函数参考手册