如何⽤javaPOI在excel中画线_javapoi对excel的操作详解
⼀、 POI简介
Apache POI是Apache软件基⾦会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
⼆、 HSSF概况
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以⽤纯Java代码来读取、写⼊、修改Excel⽂件。HSSF 为读取操作提供了两类API:urmodel和eventurmodel,即“⽤户模型”和“事件-⽤户模型”。
三、 POI EXCEL⽂档结构类
HSSFWorkbook excel⽂档对象
HSSFSheet excel的sheet HSSFRow excel的⾏
HSSFCell excel的单元格 HSSFFont excel字体
HSSFName 名称 HSSFDataFormat ⽇期格式
HSSFHeader sheet头
HSSFFooter sheet尾
HSSFCellStyle cell样式
儿童防晒HSSFDateUtil ⽇期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
90性后网基本介绍介绍完了,那么通过⼩例⼦来理解真正的⽤法:
⾸先创建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.clo();
// 输出完成之后要关闭⽂件流。要节约系统资源,同时可以避免不必要的⿇烦。然后执⾏这段程序。
}
重点是我们要将我们的信息写⼊excel中。
心态的句子
在excel中信息都是放在⼀个有⼀个sheet页中的。那么每⼀个sheet也对java来说就是⼀个对象,但是这个对象的产⽣要依赖于excel对象,也就是HSSFWorkbook对象。要不sheet页放在那⾥呢?那么在poi中sheet页对象是哪个呢?在poi中sheet映射为HSSFSheet对象。刚已经说了,sheet页对象的存在的前提就是HSSFWorkbook对象的存在。
⽅法如下,HSSFWrokbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = ateSheet(“sheet_one”);
//到这⾥我们就通过HSSFWorkbook对象创建了HSSFSheet对象。同时将这个sheet页定名为sheet_ont 也可以这样创建sheet页:
hssfworkbook.tSheetName(0,””)
其中0代表sheet页的编号,在hssfworkbook对象中的每⼀个sheet页是按照数组的形式存储的,那么第⼀个sheet页的数组下标就应该是0,可以从⽅法名字tSheetName看出来这个⽅法是给已经有的sheet页定义名字的,那么如果这个sheet页尚未建⽴,那么给⼀个根本没有的sheet页定义名字就会出现异常情况。
//然后我们像上边⼀样输出社个⽂件
FileOutputStream fileoutputstream = new FileOutputStream(“D:exceltext.xls”);
Hssfworkbook.write(fileoutputstream);
Fileoutputstream.clo();
门前三包
好了以上我们就输出了⼀个包括了中⽂命名sheet页的excel⽂件。但是我们的⽬的是不是输出这个东西啊,我们的⽬的是输出信息。那么我们来输出信息了,在excel⽂件中的信息存放形式是这样的,⾸先⽂件是严格按照⾏列形式存放在每个单元格中,于是poi中就⽤HSSFRow 对象来映射excel中的⾏,(也可以说是代替)那么列怎么映射呢?这⾥就体现出了poi创造者的智慧了,他使poi在获得了⾏对象之后,通过这个⾏对象来创建了⼀个格⼦对象,同时将信息存放在格⼦(HSSFCell)对象中,同时借⽤了格⼦的数⽬达到了对列的映射。具体⽅法如下。
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = ateSheet("frist");
HSSFRow hssfrow = ateRow(0);
// 以上就不⽤说了,这⾥通过hssfsheet对象的createRow(int i)⽅法创建了⼀个⾏对象同时指定了就是第⼀⾏
HSSFCell hssfcell = ateCell((short)0);
//然后在这个⾏对象上创建了⼀个单元格对象,就是HSSFCell对象。ateCell()⽅法的参数是short型的,这⾥⼀定要注意转型。
hssfcell.tCellValue("哈哈也是中⽂咯");
//然后给这个单元格对象设定值
FileOutputStream fileoutputstream = new FileOutputStream("d:excela.xls");
hssfworkbook.write(fileoutputstream);
fileoutputstream.clo();
这个时候我们发现了第⼀个单元格的中⽂没有显⽰出来,同时⽇期型数据也没有给我们正确的显⽰出来。我们来⼀个⼀个的解决,中⽂问题出现的原因刚已经说了是因为字符的问题,将上⾯蓝⾊的部分替换成下边这样即可:
hssfcell.tEncoding(HSSFWorkbook.ENCODING_UTF_16);
hssfcell.tCellValue("哈哈也是中⽂咯");
注意:hssfcell.tEncoding(HSSFWorkbook.ENCODING_UTF_16);
这句⼀定要写在给单元格设定值的前⾯,个⼈建议在单元格建⽴之后直接就写这个⽅法,⽆论单元格⾥是不是中⽂。
好了中⽂的问题解决了,就要处理⽇期的问题了:
我们在excel中看到的那串数字其实不是⽇期型的乱码,⽽是excel将⽇期型作为了long型来处理了,那么要这样才能得到我们要的那种⽇期呢?java中有⼀个包叫其中多是些操作字符传,⽇期,数字等等的规则⽅法,建议有时间多看看,但是在poi中不能这样⽤,于是poi给了我们⼀个特殊的对象,就是excel样式表对象,所谓的样式表就是按照预先定义好了的⽅式来进⾏数据的显⽰,在页⾯上很常⽤,要是有精⼒的⼈还是要看看,虽然对java程序员来说意义不⼤,但是义不压⼈吗?
好了废话少说来定义excel中的⽇期样式:同样excel也给出了⼀个HSSFCellyle对象,那么我们就来操作这个对象好了啊。⽅法如下:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet hssfsheet = ateSheet();
hssfworkbook.tSheetName(0, "哈哈中⽂咯",HSSFWorkbook.ENCODING_UTF_16);
HSSFRow hssfrow = ateRow(0);
HSSFCell hssfcell = ateCell((short)0);
hssfcell.tEncoding(HSSFWorkbook.ENCODING_UTF_16);
hssfcell.tCellValue("哈哈也是中⽂咯");
HSSFCellStyle hssfcellstyle = ateCellStyle();拍猫
hssfcellstyle.BuiltinFormat("m/d/yy h:mm"));
HSSFCell celldate = ateCell((short)1);
celldate.tCellValue(new Date());
celldate.tCellStyle(hssfcellstyle);
英语邮件开头ateCell((short)2).tCellValue(fal);
FileOutputStream fileoutputstream = new FileOutputStream("d:exceltext.xls");
hssfworkbook.write(fileoutputstream);
fileoutputstream.clo();
到这⾥我们就可以⾃由的⽤poi来操作excel⽂件的信息输出部分了。
信息输出的⽬的是为了更好的读取(引⾃“今天的撤退就是为了明天的胜利!”)
既然我们把信息当成了这样或者那样的对象输出的,那么我们就再把信息按照这样和那样的对象读取出来就可以了。如果你清楚了怎么输出那么输⼊就⽐较简单了,只要知道⼏个⽅法就OK了。
例⼦如下:
String filepath = "d:excela.xls";
HSSFWorkbook hssfworkbook = new HSSFWorkbook(new FileInputStream(filepath));
HSSFSheet hssfsheet = SheetAt(0);
int i = LastRowNum();
for(int k=0;k<=i;k++)
{
HSSFRow hssfrow = Row(k);
for(int j=0;j
后悔反义词
{
HSSFCell hssfcell = Cell((short)j);
System.out.DateCellValue());
}
}
解释⼀下:filepath 是你要操作的excel,通过有参数的HSSFWorkbook()构造器我们可以获得⼀个已
有的excel⽂件,就像我们打开⼀个excel⽂件⼀样。因为⼀个excel⽂件可能有多个sheet页。那么我们⾸先要定位操作那个sheet页。⽅法是:
这个⽅法其实也是⼀个创建sheet页的过程,但是由于对象在已经有了(显⽰中),我们就引⽤就可以了。
得到要操作的sheet页之后就要操作信息了,int i = LastRowNum();这个⽅法很重要的,就是我们通过HSSFSheet对象,获得了这个对象下最⼤的⾏数。然后⽤这个作为索引可以遍历所有的⾏,⽅法是:HSSFRow hssfrow = Row(k);这样就依次的获得了每个⾏对象,然后根据⾏对象了
炒西兰花 |
注意:现在给出其他⼏个链接可以参考学习poi
blog.csdn/xjun15/article/details/5805429