POI介绍

8 篇文章 0 订阅

POI介绍

  (2013-02-26 17:28:25)
标签: 

excel

 

poi

 

it

分类: 报表技术

引言

Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是创建CSV(comma separated values)文件,并将这个文件以MIMETEXT/CSV类型返回给浏览器。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件。本文将介绍一种功能强大的报表技术——POI,用它可以方便地操作Excel文件。

 

POI介绍

Apache POIApache软件基金会的开放源码函式库,是用Java编写的免费开源的跨平台的 Java APIPOI提供APIJava程序对Microsoft Office格式档案进行各种操作。

POI主要用到的类有HSSFWorkbookHSSFSheetHSSHRowHSSFCellHSSFWorkbookExcel文件对象、HSSFSheetExcel文件内的分页sheet对象、HSSHRow是行对象、HSSFCell是单元格对象,它们都在org.apache.poi.hssf.usermodel这个package里面。
下面结合以上提及的四个类,介绍下POIExcel文件的四个基本操作。

读操作

首先HSSFWorkbook要获取到文件的流,如HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(new File(“f:\\xx.xls”)))

然后通过wb对象对xx.xls Excel文件进行操作。

HSSFSheet是获取Excelsheet分页,有两种方式可以获取sheet分页对象:

1.按分页名称来获取 wb.getsheet(Name)

2.按分页顺序来获取 wb.getsheet(0)

HSSHRow获取行对象,HSSHRow row = sheet.getRow(0);Excel文件行数是从0开始。最后获取到单元格对象HSSFCell cell = row.getCell(index);index是列数,也是从0开始。

HSSFCell通过cell.getCellType()获取单元格类型,有三种类型,0表示数字、1表示文本、2表示存入了公式,并提供方法获取到想要的信息:获取字符串cell.getRichStringCellValue()、获取数值cell.getNumericCellValue()、获取公式cell.getCellFormula(),这里需要注意的是空格是属于文本格式。

写操作

POIExcel的写操作与读操作用到的对象都是这么几个。不同的是读操作是获取对象,而写操作是创建对象。

首先创建HSSFSheet对象,HSSFSheet sheet = wb.createSheet(Name);然后创建行对象HSSHRow row = sheet.createRow(rownum)rownum是第几行、从0开始算;再创建单元格对象HSSFCell cell = row.createCell(colnum)colnum是列数,从0开始,再对单元格赋值,文本型用cell.setCellValue(new HSSFRichTextString(“”))、数值用cell.setCellValue(16);最后把wb写入到一个输出流中,wb.write(new FileOutputStream(new File(path))),就生成了一个Excel文件了。

上传

Web方式对Excel的操作还是用流来操作Excel,只不过是换了个方式。

首先,在客户端加个file标签;然后把form的传输方式改为enctype="multipart/form-data";再在Struts Action层加个File属性private File myFile,名称要与标签的name一致,否则获取不到。这样在方法里通过getMyFile()就可以获取到上传的Excel文件了。

下载

有上传自然有下载,当然也是跟流有关,只不过流是服务器端的输出流。

首先,获取到服务器端的输出流对象ServletOutputStream ServletOutputStream os = this.getResponse().getOutputStream();然后设置文件内容类型this.getResponse().setContentType("application/octet-stream"),再对文件命名this.getResponse().setHeader("Content-disposition", "attachment;filename=" + fileName+ ".xls");最后把wb对象写入到os流中,就会下载到客户端。

 

POIExcel的高级操作

以上简单介绍了POI的四个基本操作,虽然已能满足一般的功能要求,但对内容有格式要求的操作来说,就需要用HSSFCellStyleHSSFDataFormatHSSFFont这三个类,它们用来对单元格格式/样式进行操作。

单元格样式

对单元格样式的操作包括两个部分:创建单元格样式对象、创建字体对象。

创建单元格样式对象:HSSFCellStyle style =wb.createCellStyle(),设置边框(上、下、左、右)style.setBorderTop((short) 1)style.setBorderBottom((short) 1)

style.setBorderLeft((short) 1)style.setBorderRight((short) 1)

在遇到合并单元格时,还要设置垂直居中,垂直:style.setVerticalAlignment

(HSSFCellStyle.VERTICAL_CENTER)、居中:style.setAlignment(HSSFCellStyle

.ALIGN_CENTER)

创建字体对象HSSFFont font = wb.createFont(),一般会用到一下三个方法 ,setFontName()设置字体、setFontHeightInPoints()设置字号、setBoldweight

(HSSFFont.BOLDWEIGHT_BOLD)加粗,style.setFont(font)保存刚才新建的字体样式。

合并单元格

合并单元格需要CellRangeAddress这个类,新建合并单元格对象c = new CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol),保存到Excel文件中sheet.addMergedRegion(c)。合并单元格后的值为合并区域的第一行第一列的值。

写入公式

       在做财务报表时,还需要往单元格里填公式,用得最多的公式就是求和。POI公式的写入首先要设置下单元格为公式类型,cell.setCellType(HSSFCell.

CELL_TYPE_FORMULA),然后写入公式表达式就OK了,cell.setCellFormula

(expression),如expression = "SUM(C"+(i+1)+":F"+(i+1)+")",写入表达式需要注意的是公式的开始行是1,而程序里读取的行是从0开始的,所以在写入公式时,要把当前行+1再写入。

单元格格式

       在合计的结果比较大时,还要格式化下数据,转换为英文的数字格式xxx,xxx,xxx,这种的格式转换就要用到HSSFDataFormat类,HSSFDataFormat df = wb.createDataFormat(),设置格式style.setDataFormat(df.getFormat("#,##0.00"))

一些常用的格式还有"0.00%""d-mmm-yy""h:mm:ss AM/PM"等。

      

总结

通过上面的描述,相信你对POI的功能已有一个大致的了解,可以在你以后如何去选择适合自己项目的报表API过程中起到一定的参考作用。

以上只是对POI的一个简单介绍,提到的知识点是本人在做人力资源系统中运用到的,POI还有很多的功能没有提到,这里只是想跟大家分享下本人对POI的一个使用心得,有用POI做过项目、对POI有过研究的同学可以私下和我交流,大家共同学习、共同进步。

 

PS:以上介绍的POI API版本是poi-3.2.jar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值