在我们实际的开发中 表现层的解决方案虽然有多样 但是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/17278package bis.excel
import java.io.File
import java.io.FileInputStream
import java.io.InputStream
import java.util.ArrayList
import java.util.List
import java.util.Map
import java.util.TreeMap
import jxl.Sheet
import jxl.Workbook
public class Excel {
@SuppressWarnings("unchecked")
public List addCust(File file){
List list=new ArrayList()
List list2=new ArrayList()
Workbook rwb=null
try {
List list1=new ArrayList()
InputStream is=new FileInputStream(file)//读取文件(所要导入excel的保存目录,如:f:\\a.xls)
rwb=Workbook.getWorkbook(is)//创建工作薄
Sheet rs=rwb.getSheet(0)//读取excel中的第一个工作表(默认新建excel下面有sheet1,sheet2,sheet3)
int cellCount=rs.getColumns()//获取Sheet表中所包含的总列数
int rowCount=rs.getRows()//获取Sheet表中所包含的总行数
for(int m=0m<cellCountm++){//将表的第一行数据保存到list1中(列名),即id,name ,age
String cell=rs.getCell(m,0).getContents()
list1.add(cell)
}
for(int i=1i<rowCounti++){//获取值
Map map=new TreeMap()
for(int j=0j<cellCountj++){
map.put(list1.get(j),rs.getCell(j,i).getContents())//将值以键/值对方式保存到map对象中即(id:1,name:zhangsan,age:18)
}
list.add(map)//将值保存到list中
//System.out.println(list.get(i-1))
}
list2.add(list1)//将表头(id,name,age)保存到list2中
list2.add(list)//将值保存到list2中
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace()
}finally{
rwb.close()
}
return list2
}
public void tosql(){
List list=addCust(file)//file:所要导入excel的保存目录,如:f:\\a.xls
Map map=new HashMap()
String[] values=new String[ls2.size()]//保存id,name,age 值
for (int i =0i <ls2.size()i++) {
map=(Map)ls2.get(i)
String value=""
id=(String)map.get("id")
name=(String)map.get("name")
age=(String)map.get("age")
value=id+""+name+""+age
values[i]=value
}
}
}
这是段读取excel表数据的代码,在tosql方法中调用addCust方法读取excel表,最后把所有行的id,name,age值保存到了values数组中,也可以保存到类中,如果你会对数据库 *** 作的话,
后面的你自己弄下就行了,不会的话留言,我晚上在告诉你,我现在上班呢,时间有限,只能写这么多了
1、下载poi相关jar,maven的集成如下:(把${poi.version}替换成你要的版本)
<dependency><groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>
2、根据poi相关api读取sheet、row、cell,获得excel的数据:
封装row的对象,即每一行数据为一个对象,每个cell为对象里的一个属性,
整个sheet的数据装进集合里;
3、处理数据,可以对数据进行验证或其他 *** 作;
4、写数据库 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)