Java POI操作Excel

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

本文只针对POI实现对Excel的读写功能给出一些指导,以及我在开发过程中踩过的“坑”,以供大家研究学习。

需要的maven依赖包:

一、首先要讲的是如何读取excel

这里有一点要非常注意,就是兼容性问题;Excel有两种文件格式,.xls和.xlsx。

获取文件:

获得文件流:

获取工作簿:

这里WorkBook要考虑兼容性问题:

以xls结尾的应是HSSFWorkBook,以xlsx结尾的应是XSSFWorkBook,

这里可以用以下方法进行兼容性判断:

获取sheet,两种方式:

获取行对象:

若要获取第一行表头信息则可直接sheet.getRow(0),这里还可以通过row0.getLastCellNum();获取到行数据的长度(这里可能会获取到大于有效长度的数值,因为编辑的时候可能会保留了空白单元格,但是其单元格格式还保留着,这些单元格也会被识别出来,因此后面获取数据的时候,需要做判空处理),然后可以遍历获取到每个单元格的数据;

当然,也可以通过sheet0.getPhysicalNumberOfRows();获取到有效行数(这里也可能会获取到大于有效长度的数值,原因和6相同,因此获取值的时候也需要做判空处理),然后再遍历获取到所有的行数据;

获取单元格数据:

比如要获取到第一列单元格:

获取值:

这里要考虑到单元格类型,包括字符型,布尔型,数值型(包含日期类型和纯数字类型)和公式类型,另外还可能出现空值或者错误的类型,其中公式类型必须做判断,不然取出来只是计算公式,而不是真正的数值;

可以通过cell.getCellType();获取到单元格的类型,再利用以下代码来进行取值(若直接获取可能会发生类型不一致的错误):

二、写入数据

获取文件:

获得文件流:

获取工作簿:

这里WorkBook要考虑兼容性问题:

以xls结尾的应是HSSFWorkBook,以xlsx结尾的应是XSSFWorkBook,

这里可以用以下方法进行兼容性判断:

获取sheet,三种方式:

若是新建文件,则需要新建sheet:

获取行对象:

如果没有row,则需要新建row

若要获取第一行表头信息则可直接sheet.getRow(0),这里还可以通过row0.getLastCellNum();获取到行数据的长度(这里可能会获取到大于有效长度的数值,因为编辑的时候可能会保留了空白单元格,但是其单元格格式还保留着,这些单元格也会被识别出来,因此后面获取数据的时候,需要做判空处理),然后可以遍历获取到每个单元格的数据;

当然,也可以通过sheet0.getPhysicalNumberOfRows();获取到有效行数(这里也可能会获取到大于有效长度的数值,原因和6相同,因此获取值的时候也需要做判空处理),然后再遍历获取到所有的行数据;

获取单元格:

写入数据:

写入数据也要注意数据类型:

如果数据类型对应不上的话,可能会导致数据显示和公式计算结果出错!

数据写完之后,需要刷新公式计算的值,不然公式类型的单元格的值不会刷新:

0

发表评论

邮箱地址不会被公开。