一、 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

{

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型的。

注意:现在给出其他几个链接可以参考学习poi

blog.csdn.net/xjun15/article/details/5805429

如何用java POI在excel中画线_java poi对excel的操作详解相关推荐

  1. 利用辅助工具怎么在Excel中画线

    Excel中有时会遇到需要我们绘制表格或者给单元格划分的情况,怎样利用辅助工具在Excel中进行划线,有没有一个相对简单的方法呢. 在Excel中,可以使用"绘图"工具来画线: 在 ...

  2. java switch 值_Java switch多值匹配操作详解

    这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...

  3. java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...

  4. java case 多个值_Java switch多值匹配操作详解

    这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...

  5. Java实现话术词槽匹配_桔子互动|百度UNIT操作详解(上篇)

    原标题:桔子互动|百度UNIT操作详解(上篇) 作者:令狐曦 文章简介: 本篇文章对UNIT的操作和注意事项进行详细说明,内容包括: 建立场景 配置对话单元/问答单元/高级设置 [配置对话单元] [配 ...

  6. excel单元格斜线_怎么在excel中画斜线?怎么在excel表格中画斜线?

    在excel表格中画斜线的技巧教程: 1.在Excel中打开一个空白工作簿. 2.您可以在任何大小的单元格中执行此操作,但是如果先将其增大则更容易理解.为此,我们只需单击并按住第1行和第2行之间的线, ...

  7. excel中match函数_Excel函数轻松学02:详解Excel函数中的数据类型

    更多系列文章,戳文末阅读原文进入:我的微博V+会员函数专栏哦~ 写在前面: 概念是用来了解的,不是用来恐惧的.一时无法理解,大可不求甚解,无需刻意强求,往后学习函数的时间里,通过实例人的潜意识会反复思 ...

  8. 单元格自适应宽度_最详细的Excel模块Openpyxl教程(二)-单元格操作详解

    在以前的推文中,我们介绍了操作Excel的模块openpyxl的入门知识,相关推文可以从本公众号的底部相关菜单获取.接下来的推文我们来学习一下openpyxl这个python模块中的其他知识,本次推文 ...

  9. java 从excel中读取数据_java如何从excel中读出数据

    package myexceltest; import jxl.*; import java.io.*; import jxl.write.*; /** * java读取Excel表格,拷贝.更新Ex ...

最新文章

  1. 算法提高课-搜索-多源BFS-AcWing 173. 矩阵距离:bfs、多源bfs
  2. 浣溪沙·过杜甫草堂有感
  3. 批量下载哨兵(Sentinel)数据
  4. 用一张图片告诉你芯片设计
  5. java数组的实现_Java数组HashCode实现
  6. 学计算机的让修电脑搞笑段子精选,搞笑段子:阿姨,我是真的就来给他们修电脑的!...
  7. python学习day-4 集合与函数
  8. 使用POI读取word文档
  9. 职业生涯最差绩效:M-
  10. string 与stringbuilder的区别
  11. 北大生物信息学公开课学习(1)
  12. apache rewrite支持post数据
  13. 一个美观的gridview样式
  14. 苹果开发者中心如何上传构建版本
  15. javascript从入门到跑路-----小文的js学习笔记(6)-----三大流程控制语句---顺序控制、分支控制、循环控制
  16. Nginx 上传图片500错误
  17. 21天刷题计划之2.1—禁忌雷炎(Java语言描述)
  18. 11.18-刷题日结
  19. 阿里P8大牛手把手教你!15个经典面试问题及回答思路,全套教学资料
  20. android发送数据短信,如何发送和接收数据短信

热门文章

  1. 关于三角形的心及费马点
  2. Windows系统部分软件显示乱码
  3. (ROS)Moveit编程示例
  4. 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)
  5. 软件测试就是找茬的?那些年和开发小哥的“爱恨情仇”
  6. 神经网络处理表格数据,神经网络如何识别图像
  7. JavaScript常用的字符串操作对象方法
  8. (私人收藏)2019WER积木教育机器人赛(普及赛)解决方案-(全套)采集深度学习样本
  9. 【大数据搜索引擎案例汇总】
  10. 打开SAP物料帐期和财务账期