JAVA读写excel

使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在网络应用日益盛行的今天,通过网络来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet中创建一个CSV(逗号分隔值)文件,并将这个文件以哑剧,文本/CSV类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Excel的Java API,使用它大家就可以方便地操纵Excel文件了。

http://www.matrix.org.cn/resource/article/1/1106.html [@more@]
Java Excel API简介

Java Excel是一开放源码项目,通过它的Java开发人员可以读取Excel文件的内容,创建新Excel的文件,更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在网络应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

现在发布的稳定版本是V2.0,提供以下功能:

从Excel 95、97、2000等格式的文件中读取数据;
读取Excel公式(可以读取Excel 97以后的公式),
生成Excel数据表(格式为Excel 97);
支持字体,数字,日期的格式化;
支持单元格的阴影操作,以及颜色操作,
修改已经存在的数据表;
现在还不支持以下功能,但不久就会提供了:

不能够读取图表信息;
可以读,但是不能生成公式,任何类型公式最后的计算值都可以读出;
应用示例

1从Excel文件读取数据表

Java Excel API既可以从本地文件系统的一个文件(xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建工作簿(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)


进口. io . *;
进口jxl。*;
…………
尝试
{
//构建工作簿对象,只读工作簿对象
//直接从本地文件创建工作簿
//从输入流创建工作簿
InputStream是=new FileInputStream(源文件),
jxl。工作簿rwb=Workbook.getWorkbook(是),
}
抓住(异常e)
{
e.printStackTrace ();
}



一旦创建了工作簿,我们就可以通过它来访问Excel表(术语:工作表)。参考下面的代码片段:


//获取第一张单表
表rs=rwb.getSheet (0);



我们既可能通过表的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。

一旦得到了床单,我们就可以通过它来访问Excel单元(术语:单元格)。参考下面的代码片段:


//获取第一行,第一列的值
细胞c00=rs.getCell (0, 0),
字符串strc00=c00.getContents ();

//获取第一行,第二列的值
细胞c10=rs.getCell (1,0);
字符串strc10=c10.getContents ();

//获取第二行,第二列的值
细胞c11=rs.getCell (1,1);
字符串strc11=c11.getContents ();

system . out。println(“细胞(0,0)”+ + strc00 +“价值:;类型:" + c00.getType ());
system . out。println(“细胞(1,0)”+ + strc10 +“价值:;类型:" + c10.getType ());
system . out。println(“细胞(1,1)”+ + strc11 +“价值:;类型:" + c11.getType ());



如果仅仅是取得单元的值,我们可以方便地通过getContents()方法,它可以将任何类型的细胞值都作为一个字符串返回。示例代码中细胞(0,0)是文本型,细胞(1,0)是数字型,细胞(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

如果有需要知道细胞内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:


字符串strc00=零;
双strc10=0.00;
日期strc11=零;

细胞c00=rs.getCell (0, 0),
细胞c10=rs.getCell (1,0);
细胞c11=rs.getCell (1,1);

如果(c00.getType ()==CellType.LABEL)
{
LabelCell labelc00=(LabelCell) c00;
strc00=labelc00.getString ();
}
如果(c10.getType ()==CellType.NUMBER)
{
NmberCell numc10=(NumberCell) c10;
strc10=numc10.getValue ();
}
如果(c11.getType ()==CellType.DATE)
{
DateCell datec11=(DateCell) c11;
strc11=datec11.getDate ();
}

system . out。println(“细胞(0,0)”+ + strc00 +“价值:;类型:" + c00.getType ());
system . out。println(“细胞(1,0)”+ + strc10 +“价值:;类型:" + c10.getType ());
system . out。println(“细胞(1,1)”+ + strc11 +“价值:;类型:" + c11.getType ());

JAVA读写excel