http://www.nit-pro.org/ReadNews_shisheng.asp?NewsID=7865
在企业项目中经常要用Java来读写Excel或者Word文档,Excel是微软的office产品中的一个重要产品,并且也是非常流行的产品。现在走在大街上的10个人可能都不知道java是什么东西,但是可能10个人都知道怎么操作Excel。Excel的流行是有原因的,很方便,很通用,很简单。
这么好的东西怎么可以不属于java呢?所以就出现了poi包。
首先呢?poi是java开源组织的贡献(因为java的开源导致很多人在研究它,进而出现了许多的开源组织。);具体是那个组织我们就不要知道了,但是要会用。
Poi 说白了就是别人写好的一些操作excel的class,打成了一个.jar包!既然人家已经写好了,我们就不要知道其内部的东西,我们只要会使用poi给我们留的接口就可以了,如果想知道内部是这样运行的就下一个src包看看好了啊。可以更加方便帮助你对poi的理解。那么首先到http://apache.justdn.org/jakarta/poi 我下的是poi-bin-2.5.1-final-20040804
因为大家要听我讲,建议统一一下文件的版本就下这个好了啊,然后解压这个文件,进入解压之后的文件中,会找到这样3个.jar包。如下图:
<?xml:namespace prefix = o />建议大家自己建立一个文件夹,比如我的就叫Mylib 然后将这3个.jar包拷贝到Mylib文件夹中,然后打开eclips导入这个3个.jar文件。
所谓的操作excel无非就是将我们的信息写入excel文件和获得excel文件中的信息。这个是我们关心的重点。
首先创建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文件,那样的话就没有意思了,还不如直接用excel了。重点是我们要将我们的信息写入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();
然后我们进入d盘的excel文件夹中打开text.xls文件,我们将看到如下的效果。

这样我们就建立了一个自己的excel文件,和一个自己的excel文件中的sheet页。但是当使用方法
Hssfworkbook.createSheet(“”);方法的时候,如果要建立的sheet页要用中文命名,那么会出现乱码的情况,出现这个情况的原因就是:excel文件默认的编码规则是ENCODING_COMPRESSED_UNICODE
但是中文不支持或者说这个编码规则不支持中文,那么怎么办啊.能不能因为他不支持中文就放弃了啊!答案是不能,那么怎么办啊,转码啊.方法如下:
Hssfworkbook.createSheet();
Hssfworkbook.setSheetName(0,”哈哈中文咯”,HSSFWorkbook.ENCODING_UTF_16);
//然后我们像上边一样输出社个文件
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型的。
现在是晚上3:33了,我必须睡觉了,要不明天该起不来了,写的不是很细致,如果有问题可以联系我的啊,我是于晓昆!(于晓昆msn:yxk790302@hotmail.com)
分享到:
相关推荐
本文将详细介绍如何使用POI库在Java中进行Excel的读写操作,以及一个在Eclipse环境中运行的实例。 首先,我们需要了解Apache POI的基本概念。POI是Apache软件基金会的一个开源项目,它提供了Java API来处理...
Java中的Apache POI库是处理Microsoft Office文档的强大工具,尤其在读写Excel文件方面。它不仅支持旧版的Excel文件格式(.xls,用于Office 2003及更早版本),还支持新版本的Excel文件格式(.xlsx,自Office 2007起...
Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java POI Java POI 是一个开源的 Java ...
Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的新版Excel文件。这两个接口在API上几乎完全兼容,使得开发者可以方便地在不同版本的Excel...
Java 使用 POI 读取 Excel 文件 Java 是一种广泛使用的编程语言,而 Excel 是一种常用的电子表格软件。有时候,我们需要在 Java 程序中读取 Excel 文件的内容,例如将 Excel 表格中的数据导入到数据库中或者进行...
总的来说,“POI读写excel文件+poi简单文档”涵盖了Apache POI在Java环境中处理Excel文件的基础和进阶知识,是学习和使用POI进行Excel操作的重要参考资料。通过学习和实践,开发者可以轻松地在Java程序中实现Excel...
poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel
简而言之,您可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。本代码实例是使用java语言写的poi解密excel文件实例代码,代码只实现了.xls类型的excel,.xlsx类型的excel只需...
总结,Apache POI是Java开发中处理Excel文件的强大工具,涵盖了从基本的读写操作到复杂的格式设置和公式计算。通过熟练掌握Apache POI,开发者可以构建灵活且高效的Excel处理程序,满足各种业务需求。
遗憾的是,提供的文件列表中只有`jeebbs-db-3.sql`,这似乎是一个SQL数据库文件,与Java POI读写Excel的主题并不直接相关。通常,SQL文件用于导入或导出数据库的数据,如果博客作者有提到结合Java POI与SQL操作Excel...
在这个“java的poi读写excel项目实例”中,我们有两个主要的Java类:`read.java`和`write.java`,分别用于处理Excel文件的读取和写入操作。 首先,让我们深入了解一下`read.java`。这个类通常会包含一个方法,比如`...
在界面上有一个TextField,一个浏览按钮,一个导入按钮。当选择浏览按钮时,弹出文本选择窗口,选择Excel文件之后,将路径显示在TextField中。点击导入,将Excel中的数据保存到SqlServer数据库中。
Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...
poi读写excel文件,解析xls文件中的内容:得到行数据,返回行数据数组
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
通过以上步骤,我们可以实现在Java程序中使用JXL和POI库给Excel文件添加动态水印的功能。这种技术不仅适用于企业内部的文档管理,还可以用于任何需要保护文档版权和安全性的场景。希望这篇教程能够帮助到有类似需求...
Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 首先,我们需要导入Apache POI的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下...
Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 Java POI导出图片到Excel示例代码,标题...
标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...