使用Windows操作系統的朋友對Excel(電子表格)一定不會陌生
但是要使用Java語言來操縱Excel文件並不是一件容易的事
在Web應用日益盛行的今天
通過Web來操作Excel文件的需求越來越強烈
目前較為流行的操作是在JSP或Servlet 中創建一個CSV (comma separated values)文件
並將這個文件以MIME
text/csv類型返回給浏覽器
接著浏覽器調用Excel並且顯示CSV文件
這樣只是說可以訪問到Excel文件
但是還不能真正的操縱Excel文件
本文將給大家一個驚喜
向大家介紹一個開放源碼項目
Java Excel API
使用它大家就可以方便地操縱Excel文件了
Java Excel API簡介 Java Excel是一開放源碼項目
通過它Java開發人員可以讀取Excel文件的內容
創建新的Excel文件
更新已經存在的Excel文件
使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表
因為是使用Java編寫的
所以我們在Web應用中可以通過JSP
Servlet來調用API實現對Excel數據表的訪問
現在發布的穩定版本是V
提供以下功能
從Excel
等格式的文件中讀取數據
讀取Excel公式(可以讀取Excel
以後的公式)
生成Excel數據表(格式為Excel
)
支持字體
數字
日期的格式化
支持單元格的陰影操作
以及顏色操作
修改已經存在的數據表
現在還不支持以下功能
但不久就會提供了
不能夠讀取圖表信息
可以讀
但是不能生成公式
任何類型公式最後的計算值都可以讀出
應用示例 從Excel文件讀取數據表
Java Excel API既可以從本地文件系統的一個文件(
xls)
也可以從輸入流中讀取Excel數據表
讀取Excel數據表的第一步是創建Workbook(術語
工作薄)
下面的代碼片段舉例說明了應該如何操作
(完整代碼見ExcelReading
java)
import java
io
*;
import jxl
*;
… … … …
try
{
//構建Workbook對象
只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建Workbook
InputStream is = new FileInputStream(sourcefile);
jxl
Workbook rwb = Workbook
getWorkbook(is);
}
catch (Exception e)
{
e
printStackTrace();
}
一旦創建了Workbook
我們就可以通過它來訪問Excel Sheet(術語
工作表)
參考下面的代碼片段
//獲取第一張Sheet表
Sheet rs = rwb
getSheet(
);
我們既可能通過Sheet的名稱來訪問它
也可以通過下標來訪問它
如果通過下標來訪問的話
要注意的一點是下標從
開始
就像數組一樣
一旦得到了Sheet
我們就可以通過它來訪問Excel Cell(術語
單元格)
參考下面的代碼片段
//獲取第一行
第一列的值
Cell c
= rs
getCell(
);
String strc
= c
getContents();
//獲取第一行
第二列的值
Cell c
= rs
getCell(
);
String strc
= c
getContents();
//獲取第二行
第二列的值
Cell c
= rs
getCell(
);
String strc
= c
getContents();
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
如果僅僅是取得Cell的值
我們可以方便地通過getContents()方法
它可以將任何類型的Cell值都作為一個字符串返回
示例代碼中Cell(
)是文本型
Cell(
)是數字型
Cell(
)是日期型
通過getContents()
三種類型的返回值都是字符型
如果有需要知道Cell內容的確切類型
API也提供了一系列的方法
參考下面的代碼片段
String strc
= null;
double strc
=
;
Date strc
= null;
Cell c
= rs
getCell(
);
Cell c
= rs
getCell(
);
Cell c
= rs
getCell(
);
if(c
getType() == CellType
LABEL)
{
LabelCell labelc
= (LabelCell)c
;
strc
= labelc
getString();
}
if(c
getType() == CellType
NUMBER)
{
NmberCell numc
= (NumberCell)c
;
strc
= numc
getvalue();
}
if(c
getType() == CellType
DATE)
{
DateCell datec
= (DateCell)c
;
strc
= datec
getDate();
}
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
System
out
println(
Cell(
)
+
value :
+ strc
+
; type :
+ c
getType());
在得到Cell對象後
通過getType()方法可以獲得該單元格的類型
然後與API提供的基本類型相匹配
強制轉換成相應的類型
最後調用相應的取值方法getXXX()
就可以得到確定類型的值
API提供了以下基本類型
與Excel的數據格式相對應
如下圖所示
每種類型的具體意義
請參見Java Excel API document.
當你完成對Excel電子表格數據的處理後
一定要使用close()方法來關閉先前創建的對象
以釋放讀取數據表的過程中所占用的內存空間
在讀取大量數據時顯得尤為重要
參考如下代碼片段
//操作完成時
關閉對象
釋放占用的內存空間
rwb
close();
Java Excel API提供了許多訪問Excel數據表的方法
在這裡我只簡要地介紹幾個常用的方法
其它的方法請參考附錄中的Java Excel API document.
Workbook類提供的方法 int getNumberOfSheets()
獲得工作薄(Workbook)中工作表(Sheet)的個數
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
int sheets = rwb
getNumberOfSheets();
Sheet[] getSheets()
返回工作薄(Workbook)中工作表(Sheet)對象數組
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb
getSheets();
String getVersion()
返回正在使用的API的版本號
好像是沒什麼太大的作用
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
String apiVersion = rwb
getVersion();
Sheet接口提供的方法
) String getName()
獲取Sheet的名稱
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
String sheetName = rs
getName();
) int getColumns()
獲取Sheet表中所包含的總列數
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
int rsColumns = rs
getColumns();
) Cell[] getColumn(int column)
獲取某一列的所有單元格
返回的是單元格對象數組
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
Cell[] cell = rs
getColumn(
);
) int getRows()
獲取Sheet表中所包含的總行數
示例
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
int rsRows = rs
getRows();
) Cell[] getRow(int row)
獲取某一行的所有單元格
返回的是單元格對象數組
示例子
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
Cell[] cell = rs
getRow(
);
) Cell getCell(int column
int row)
獲取指定單元格的對象引用
需要注意的是它的兩個參數
第一個是列數
第二個是行數
這與通常的行
列組合有些不同
jxl
Workbook rwb = jxl
Workbook
getWorkbook(new File(sourcefile));
jxl
Sheet rs = rwb
getSheet(
);
Cell cell = rs
getCell(
);
生成新的Excel工作薄
下面的代碼主要是向大家介紹如何生成簡單的Excel工作表
在這裡單元格的內容是不帶任何修飾的(如
字體
顏色等等)
所有的內容都作為字符串寫入
(完整代碼見ExcelWriting
java)
與讀取Excel工作表相似
首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象
這裡要注意的是
只能通過API提供的工廠方法來創建Workbook
而不能使用WritableWorkbook的構造函數
因為類WritableWorkbook的構造函數為protected類型
示例代碼片段如下
import java
io
*;
import jxl
*;
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19757.html