POI操作Excel

1 .POI工具包

JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI 。jxl 只能操作以.xls为后缀的excel。而poi可以操作后缀为.xls 和 .xlsx两种格式的excel。

POI全称 PoorObfuscation Implementation,利用POI接口可以通过JAVA操作Microsoftoffice 套件工具的读写功能。POI支持office的所有版本。

在官网中下载jar包以及源码包:

下载完后,打开“poi-bin-XXXXXXXX”获取操作excel需要的jar包,并将这些jar包复制到项目中。需要复制

poi-ooxml-XXXXXXXX.jar,

poi-ooxml-schemas-XXXXXXXX.jar,以及复制在ooxml-lib目录下的xmlbeans-XXXXX.jar,dom4j-XXXXX.jar。

 

1.2        POI Hello World

在POI包中有如下几个主要对象和excel的几个对象对应:

HSSFWorkbook

Excel 工作簿workbook

HSSFSheet

Excel 工作表 sheet

HSSFRow

Excel 行

HSSFCell

Excel 单元格

利用以上几个对象,我们简单创建一个Excel工作表,往里面的C1单元格写入和读出“Hello World”:

 再利用上述几个对象将“Hello World”读取出来:

1.3        POI与Excel

通过上门的例子我们知道如下信息:

1、       Excel 的工作簿对应POI的HSSFWorkbook对象;

2、       Excel 的工作表对应POI的HSSFSheet对象;

3、       Excel 的行对应POI的HSSFRow对象;

4、       Excel 的单元格对应POI的HSSFCell对象。

POI 对07以后的excel版本进行读写,读写方法和读写03版是一样的,只是对象名称变了;原来各对象的开头字母H变为X,操作方式不变。

1、       Excel 的工作簿对应POI的XSSFWorkbook对象;

2、       Excel 的工作表对应POI的XSSFSheet对象;

3、       Excel 的行对应POI的XSSFRow对象;

4、       Excel 的单元格对应POI的XSSFCell对象。

创建07以后版本excel

读取07以后版本excel

 

在“poi-bin-3.10.1-20140818\poi-3.10.1\docs\apidocs”目录中,点击“index.html”查看POI api文档,我们可以查询POI中所有这些对象的属性和方法。

从api文档中我们了解到:

HSSFWorkbook和 XSSFWorkbook 都实现了Workbook接口;

HSSFSheet和 XSSFSheet 实现了Sheet接口;

HSSFRow和 XSSFRow 实现了Row接口;

HSSFCell和 XSSFCell 实现了Cell接口;

因为这两类处理对象共同实现了对应的同一接口,届时将大大方便和简化了同时处理不同格式的excel文件的编码工作。如;在处理03和07版本的excel文件时利用统一的接口就可以做到分析两个版本的excel数据。

POI同时读入03和07版本的excel。

方法一:判断文件的名称后调用对应版本的读入方法。

方法二:根据不同版本用Workbook接口来读入文件并统一处理。

            \\.(?i)忽略大小写的意思

1.4        格式化Excel

POI中主要的格式化对象常用的有合并单元格、设置单元格字体、边框,背景颜色等。

合并单元格

在POI中有一个CellRangeAddress对象,这个对象的构造方法CellRangeAddress(int firstRow,int lastRow, int firstCol, int lastCol) 有4个参数,分别表示(起始行号,终止行号,起始列号,终止列号), 设置这个对象中要合并的单元格范围后,工作表对象sheet调用方法addMergedRegion(CellRangeAddress region) ,将上述设置的CellRangeAddress对象作为参数传入即可合并单元格。

【注意:上图中合并单元格后,单元格的名称是第一个单元格;即上面中合并了第二行的第二列到第五列,合并后的单元格叫B2,而其它被合并的单元格已经无效了,不能对无效单元格设置值。如果进行了设置将不显示。】

设置单元格样式

设置单元格样式则要先初始化POI中的单元格样式对象HSSFCellStyle,然后在样式对象中设置不同的样式(内容位置、字体、背景、颜色、边框等)。单元格样式是由工作簿workbook创建的,一个工作簿可以创建多个样式。

①  设置单元格内容位置;

设置水平位置 setAlignment(short align) 

设置垂直位置setVerticalAlignment(short align) 

②  设置单元格字体;POI中的字体对象为HSSFFont,字体是由工作簿创建,可以用于多个单元格上。

③  设置单元格背景色。

 

1.5        POI应用案例

1.5.1             项目环境

Web框架:SSH(SpringMVC+Spring+Hibernate)

数据库:mysql

JDK版本:jdk

Eclipse版本:Eclipse

应用服务器:apache-tomcat

 

1.5.2             导出数据到Excel

【需求】在项目数据库中,有一张用户表user,里面有系统的用户数据;现在需要将这个用户表的数据导出到excel中提供用户下载。要求excel要有个一个主标题,各个列名称。

【分析】① 从数据库中读取用户数据;② 创建excel并写入数据;③ 将excel输出到浏览器提供用户下载。

【编码】利用POI中的HSSFWorkbook创建一个excel,再利用 HSSFSheet 创建一个sheet,HSSFRow/HSSFCell创建行/列。创建的excel第一行标题(CellRangeAddress合并单元格),第二行列名,第三行开始是具体用户数据。

【注意】在输出excel时,要设定要好respone的头部ContentType为application/octet-stream或者application/x-excel,Header的Content-Disposition要正确设置下载文件名称编码,以便可以在各大浏览器中都能够正确输出中文的下载文件名称。


 

1.5.3             导入Excel数据

【需求】将一张有用户数据的Excel导入到数据库中并展示在页面。

【分析】① 获取excel数据;② 解析excel 数据;③ 插入数据到数据库。

【编码】使用正则表达式判断用户上传的excel是什么版本判断用户上传的excel是什么版本,使用HSSFWorkbook来读取2003以前版本,使用XSSFWorkbook来读取2007及以后版本。逐个遍历sheet,row,cell获取每个单元格对应数据并将数据转换为用户对象插入数据库中。当导入完毕后返回列表页面。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值