一、 POI简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
二、 HSSF概况
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
三、 POI EXCEL文档结构类
HSSFWorkbook excel文档对象
HSSFSheet excel的sheet HSSFRow excel的行
HSSFCell excel的单元格 HSSFFont excel字体
HSSFName 名称 HSSFDataFormat 日期格式
HSSFHeader sheet头
HSSFFooter sheet尾
HSSFCellStyle cell样式
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
基本介绍介绍完了,那么通过小例子来理解真正的用法:
首先创建excel文件。
static public void main(String arg[]) throws IOException
{
/**创建一个空白的excel文件,这个是excel文件在java中的对象,java不是操作对象的语言吗?
*那么就将一个excel文件映射成为一个对象。然而这个excel的对象在java就是HSSFWorkbook
*那么也就是说:在java中你要使用poi来操作excel那么HSSFWorkbook对象就是你要操作的那个excel文件,
*当HSSFWorkbook 对象是一个空对象的时候,就默认为你创建了一个excel文件
*/
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
// 建议大家,当使用一个未知的类或者接口也好,当创建这个类或者接口的对象,最好用其全称的小写方式,容易记录。学的能快点
FileOutputStream fileoutputstream = new FileOutputStream("D:exceltext.xls");
// 通过java的io包创建一个要输出的文件,但是文件名要用“.xls”结尾
hssfworkbook.write(fileoutputstream);
// 调用HSSFWorkbook对象的write方法根据excel本书的规范生产新文件。注:并不是说你把文件是用什么结尾就是什么类型的文件。
fileoutputstream.close();
// 输出完成之后要关闭文件流。要节约系统资源,同时可以避免不必要的麻烦。然后执行这段程序。
}
重点是我们要将我们的信息写入excel中。
在excel中信息都是放在一个有一个sheet页中的。那么每一个sheet也对java来说就是一个对象,但是这个对象的产生要依赖于excel对象,也就是HSSFWorkbook对象。要不sheet页放在那里呢?那么在poi中sheet页对象是哪个呢?在poi中sheet映射为HSSFSheet对象。刚已经说了,sheet页对象的存在的前提就是HSSFWorkbook对象的存在。
方法如下,HSSFWrokbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = hssfworkbook.createSheet(“sheet_one”);
//到这里我们就通过HSSFWorkbook对象创建了HSSFSheet对象。同时将这个sheet页定名为sheet_ont 也可以这样创建sheet页:
hssfworkbook.createSheet();
hssfworkbook.setSheetName(0,””)
其中0代表sheet页的编号,在hssfworkbook对象中的每一个sheet页是按照数组的形式存储的,那么第一个sheet页的数组下标就应该是0,可以从方法名字setSheetName看出来这个方法是给已经有的sheet页定义名字的,那么如果这个sheet页尚未建立,那么给一个根本没有的sheet页定义名字就会出现异常情况。
//然后我们像上边一样输出社个文件
FileOutputStream fileoutputstream = new FileOutputStream(“D:exceltext.xls”);
Hssfworkbook.write(fileoutputstream);
Fileoutputstream.close();
好了以上我们就输出了一个包括了中文命名sheet页的excel文件。但是我们的目的是不是输出这个东西啊,我们的目的是输出信息。那么我们来输出信息了,在excel文件中的信息存放形式是这样的,首先文件是严格按照行列形式存放在每个单元格中,于是poi中就用HSSFRow对象来映射excel中的行,(也可以说是代替)那么列怎么映射呢?这里就体现出了poi创造者的智慧了,他使poi在获得了行对象之后,通过这个行对象来创建了一个格子对象,同时将信息存放在格子(HSSFCell)对象中,同时借用了格子的数目达到了对列的映射。具体方法如下。
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = hssfworkbook.createSheet("frist");
HSSFRow hssfrow = hssfsheet.createRow(0);
// 以上就不用说了,这里通过hssfsheet对象的createRow(int i)方法创建了一个行对象同时指定了就是第一行
HSSFCell hssfcell = hssfrow.createCell((short)0);
//然后在这个行对象上创建了一个单元格对象,就是HSSFCell对象。Hssfrow.createCell()方法的参数是short型的,这里一定要注意转型。
hssfcell.setCellValue("哈哈也是中文咯");
//然后给这个单元格对象设定值
hssfrow.createCell((short)1).setCellValue(new Date());
hssfrow.createCell((short)2).setCellValue(false);
hssfrow.createCell((short)3).setCellValue(12.00);
FileOutputStream fileoutputstream = new FileOutputStream("d:excela.xls");
hssfworkbook.write(fileoutputstream);
fileoutputstream.close();
这个时候我们发现了第一个单元格的中文没有显示出来,同时日期型数据也没有给我们正确的显示出来。我们来一个一个的解决,中文问题出现的原因刚已经说了是因为字符的问题,将上面蓝色的部分替换成下边这样即可:
hssfcell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
hssfcell.setCellValue("哈哈也是中文咯");
注意:hssfcell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
这句一定要写在给单元格设定值的前面,个人建议在单元格建立之后直接就写这个方法,无论单元格里是不是中文。
好了中文的问题解决了,就要处理日期的问题了:
我们在excel中看到的那串数字其实不是日期型的乱码,而是excel将日期型作为了long型来处理了,那么要这样才能得到我们要的那种日期呢?java中有一个包叫java.text其中多是些操作字符传,日期,数字等等的规则方法,建议有时间多看看,但是在poi中不能这样用,于是poi给了我们一个特殊的对象,就是excel样式表对象,所谓的样式表就是按照预先定义好了的方式来进行数据的显示,在页面上很常用,要是有精力的人还是要看看,虽然对java程序员来说意义不大,但是义不压人吗?
好了废话少说来定义excel中的日期样式:同样excel也给出了一个HSSFCellseyle对象,那么我们就来操作这个对象好了啊。方法如下:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = hssfworkbook.createSheet();
hssfworkbook.setSheetName(0, "哈哈中文咯",HSSFWorkbook.ENCODING_UTF_16);
HSSFRow hssfrow = hssfsheet.createRow(0);
HSSFCell hssfcell = hssfrow.createCell((short)0);
hssfcell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
hssfcell.setCellValue("哈哈也是中文咯");
HSSFCellStyle hssfcellstyle = hssfworkbook.createCellStyle();
hssfcellstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
HSSFCell celldate = hssfrow.createCell((short)1);
celldate.setCellValue(new Date());
celldate.setCellStyle(hssfcellstyle);
hssfrow.createCell((short)2).setCellValue(false);
hssfrow.createCell((short)3).setCellValue(12.00);
FileOutputStream fileoutputstream = new FileOutputStream("d:exceltext.xls");
hssfworkbook.write(fileoutputstream);
fileoutputstream.close();
到这里我们就可以自由的用poi来操作excel文件的信息输出部分了。
信息输出的目的是为了更好的读取(引自“今天的撤退就是为了明天的胜利!”)
既然我们把信息当成了这样或者那样的对象输出的,那么我们就再把信息按照这样和那样的对象读取出来就可以了。如果你清楚了怎么输出那么输入就比较简单了,只要知道几个方法就OK了。
例子如下:
String filepath = "d:excela.xls";
HSSFWorkbook hssfworkbook = new HSSFWorkbook(new FileInputStream(filepath));
HSSFSheet hssfsheet = hssfworkbook.getSheetAt(0);
int i = hssfsheet.getLastRowNum();
for(int k=0;k<=i;k++)
{
HSSFRow hssfrow = hssfsheet.getRow(k);
for(int j=0;j<hssfrow.getLastCellNum();j++)
{
HSSFCell hssfcell = hssfrow.getCell((short)j);
System.out.println(hssfcell.getDateCellValue());
}
}
解释一下:filepath 是你要操作的excel,通过有参数的HSSFWorkbook()构造器我们可以获得一个已有的excel文件,就像我们打开一个excel文件一样。因为一个excel文件可能有多个sheet页。那么我们首先要定位操作那个sheet页。方法是:hssfworkbook.getSheetAt(0);
这个方法其实也是一个创建sheet页的过程,但是由于对象在已经有了(显示中),我们就引用就可以了。
得到要操作的sheet页之后就要操作信息了,int i = hssfsheet.getLastRowNum();这个方法很重要的,就是我们通过HSSFSheet对象,获得了这个对象下最大的行数。然后用这个作为索引可以遍历所有的行,方法是:HSSFRow hssfrow = hssfsheet.getRow(k);这样就依次的获得了每个行对象,然后根据行对象了
hssfrow.getLastCellNum()这个方法就可以获得对于的行中最大了单元格的数目,然后通过HSSFCell hssfcell = hssfrow.getCell((short)j);这个方法得到单元格的内容;注意标红的位置,也是一个short型的。
注:此文转载于http://www.cnblogs.com/aoyun/archive/2012/08/23/2652874.html
另附上其他资料:
http://www.cnblogs.com/vTree/archive/2011/11/30/2268721.html
blog.csdn.net/xjun15/article/details/5805429
相关推荐
对于Excel操作,Java POI提供了HSSF(对应.xls文件)和XSSF(对应.xlsx文件)两个组件,分别用于处理不同版本的Excel文件。 ### 二、显示货币格式 在使用Java POI生成Excel时,为了使数据更易读和专业,我们经常...
Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...
Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...
Java调用POI操作excel,此篇 POI 讲解相对基础,都是平时我们在开发中用到的功能。主要包括 Excel的读取、写入,各种数据格式处理、单元格合并、注释、下拉列表及单元格的边框、背景色、宽高度调整等。
### JAVA POI 导出 EXCEL 报表的操作详解(含格式及样式实现) #### 一、概述 在日常工作中,我们经常会遇到需要将数据导出到 Excel 的情况,尤其是在处理大量的报表数据时。Java POI 库为 Java 开发者提供了一种...
Java POI 详解 Java POI 详解是 Java 软件工程师教育系列教程中的一个重要章节,旨在讲述 Java 中 POI 包的使用详解。...Java POI 详解为 Java 开发者提供了一个强大的工具,可以轻松地实现 Excel 文件的读写操作。
### POI实战-java开发excel详解 #### 1. POI入门 ##### 1.1 Excel基本知识 在Java开发中,处理Excel文件是一项常见的任务。理解Excel的基本结构是使用Apache POI库进行开发的基础。 - **Excel文件结构**:一个...
### Java POI 操作 Excel 的知识点详解 #### 一、POI 介绍及结构说明 **1. Apache POI 简介** - **定义**:Apache POI 是一个由 Apache 软件基金会提供的开源项目,它提供了一组 API,使 Java 程序能够读写 ...
《使用Apache POI 3.8进行Excel操作的详解》 Apache POI 是一个流行的开源项目,它允许Java开发者创建、修改和显示Microsoft Office格式的文件,尤其是Excel工作簿(.xlsx和.xls)。在给定的标题“Excel操作工具poi...
### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)...
### Java通过POI和JXL给Excel动态添加水印 #### 概述 在实际工作中,经常需要对敏感或重要的Excel文件进行保护措施,比如添加水印。这不仅可以增加文档的专业性,还可以作为版权保护的一种手段。本文将详细介绍...
在Java环境中,POI提供了一种强大的API,允许开发者读取、写入和修改Excel电子表格。本教程将带你深入理解如何使用POI进行Excel操作。 一、POI简介 Apache POI是Apache软件基金会的一个项目,它提供了API,使得...
通过阅读源代码(如果`src`目录下有相关Java代码)和分析这些Excel文件,可以深入了解POI库的实际应用和操作方法。`.idea`目录通常是IntelliJ IDEA项目的配置文件,帮助开发者管理和构建项目。`target`目录则通常...
Java中的Apache POI库是处理Microsoft Office文档的强大工具,尤其在Excel的导入和导出方面。本教程将深入探讨如何使用POI库实现在Java中读取和写入Excel文件,以及为什么在大数据量时,POI相对于jxl库具有显著优势...
### POI生成Excel报表知识点详解 #### 一、Apache POI简介 Apache POI是Apache软件基金会的一个开源项目,主要用于处理Microsoft Office格式的文件。它提供了API来读写Word、Excel等Office文档格式。其中,处理...