使用Apache POI操作生成Execl
使用Java操作数据生成Excel表格,在网上能搜到的方式有很多,比如jxl,还有今天用到POI。POI是Apache开源的一个项目,该工具使用简单,方便。
准备与一些概念约定
需要在poi官网下载相应的jar包,或者使用maven来引入包。在开始之前我们需要知道一些关于excel文档的概念。一个excel文件通常称为[workbook],excel里面的一个工作页面通常叫做[sheet],sheet里面的格子称为[单元格cell],单元格由坐标确定唯一位置,相应为[行row],[列col]。
POI
POI 中主要的几个类为:HSSFWorkbook
,HSSFSheet
,Row
,Cell
。就像我们创建一个最简单的报表文件一样,先创建excel文件(HSSFWorkbook),然后创建一个工作页(HSSFSheet),然后找到哪一行(Row),在哪一列上创建一个单元格(Cell)。你在excel中操作的最小单位都是Cell,所以我们进行读取和操作的最小单位也是Cell。
嗯,如果你还喜欢猜测,为什么猜测了?因为这几个类都是HSSF开头,那么是不是后面的就是他们的父类,而这些HSSF开头的都是他们的实现了。答案是的。
开始编程前,请记住,你再操作excel的一个步骤,写代码的时候流程也是这样的。
1 | //创建 excel workbook |
这样一个简单的单元格内容操作就完成了。
多变的需求
很多时候我们会有一些特殊的要求,比如文字居中,多行合并,多列合并,加底色,文字颜色等等。。
用的最多的就是文字居中了,这类需求往往都是对于一个单元格有相应要求,POI针对这种需求有一个类:Style
。用style来设置单元格的相关样式,下面来看一个文本居中的样式代码:
1 | HSSFCellStyle style = excel.createCellStyle(); |
我们在进行合并的时候,其实实际上合并的还是单元格。所以我们在创建单元格的时候进行一些单元格范围参数设置:
1 | //单元格范围 参数(int firstRow, int lastRow, int firstCol, int lastCol) |
此时被合并的行的其中的单元格都将无效,也就是说再操作这些被合并的单元格都已经不再称为单元格。
1 | //单元格范围 参数(int firstRow, int lastRow, int firstCol, int lastCol) |
像上述代码,second不会输出到excel,因为它的所在单元格(1,0)已经被合并了。
通常我们都会自己写一些工具类,然后进行操作excel操作,你也可以试着自己写一个。我这里就不贴我的代码了。
纸上得来终觉浅,绝知此事要躬行