Java操作Excel之理解JXL---讀取Excel
關鍵字: java工具之使用
JXL(Java Excel API)是一個用來動態讀寫Excel文件的開源框架,利用它可以在任何支持Java的操作系統上動態讀寫Excel文件。JXL的主頁是:http://www.andykhan.com/jexcelapi/,可以在這里下載到它的最新的版本。
你可以分別通過如下命令
java -jar jxl.jar -xml test.xls
java -jar jxl.jar -cvs test.xls
以xml和cvs格式查看test.xls,這是因為JXL作者實現了一個用來演示的jxl.demo.Demo的類。
當然我們使用JXL主要是用它來動態讀寫Excel文件。現在就來看看JXL在對Excel的讀和寫上都提供了那些支持。
先來看看Excel文件中都有寫上面對象
1 文件對象 2工作簿對象 3 單元格對象。
相應的在JXL中就有Workbook,Sheet ,Cell 。通過這三個對象我們就可以實現Excel文件的讀取工作。
我們先想想一下讀取步驟,不管是什么樣的Excel操作框架必定都要經歷
1選取Excel文件,2選擇工作簿,3選擇Cell,4讀取信息。
那么現在就可以看看JXL中這四步驟如何體現:
//通過Workbook的靜態方法getWorkbook選取Excel文件
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));
//通過Workbook的getSheet方法選擇第一個工作簿(從0開始)
Sheet sheet = workbook.getSheet(0);
//通過Sheet方法的getCell方法選擇位置為C2的單元格(兩個參數都從0開始)
Cell c2 = sheet.getCell(2,1);
//通過Cell的getContents方法把單元格中的信息以字符的形式讀取出來
String stringc2 = c2.getContents();
可以看到正是剛才所說的四個步驟。
我們都知道Excel單元格是有格式的,那么這些信息如何取得。
Cell提供了一個getType方法能夠返回單元格的類型信息,同時JXL提供了一個CellType類用來預設Excel中的類型信息,而且JXL提供了一些Cell類的子類用來分別用來表示各種類型的單元格,如LabelCell,NumberCell,DateCell分別表示字符、數值、日期類型的單元格。所以我們可以這樣寫:
if (c2.getType() == CellType.NUMBER)
{
NumberCell nc = (NumberCell) c2;
numberb2 = nc.getValue();
}
最后不要忘記關閉workbook以釋放資源:
workbook.close();
現在總結一下:三個對象,四個步驟,注意格式。就可以輕松的從Excel文件中讀取數據.
例子請見
Java代碼
import java.io.*;
<BR>import jxl.*;
<BR>class ReadExcel{
<BR> public void readExcel(String sourcefile){
<BR> try{
<BR> //構建Workbook對象, 只讀Workbook對象
<BR> //直接從本地文件創建Workbook
<BR> //從輸入流創建
<BR> Workbook InputStream is = new FileInputStream(sourcefile);
<BR> Workbook rwb = Workbook.getWorkbook(is);
<BR> }catch (Exception e){
<BR> e.printStackTrace();
<BR> }
<BR> //獲取第一張Sheet表
<BR> Sheet rs = rwb.getSheet(0);
<BR> //一旦得到了Sheet,就可以訪問Excel Cell(術語:單元格)
<BR> //獲取第一行,第一列的值
<BR> Cell c00 = rs.getCell(0, 0);
<BR> String strc00 = c00.getContents();
<BR> //獲取第一行,第二列的值
<BR> Cell c10 = rs.getCell(1, 0);
<BR> String strc10 = c10.getContents();
<BR> //獲取第二行,第二列的值
<BR> Cell c11 = rs.getCell(1, 1);
<BR> String strc11 = c11.getContents();
<BR> System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
<BR> System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
<BR> System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
<BR> //操作完成時,關閉對象,釋放占用的內存空間
<BR> rwb.close();
<BR>
<BR> }
<BR>}
import java.io.*;
import jxl.*;
class ReadExcel{
public void readExcel(String sourcefile){
try{
//構建Workbook對象, 只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建
Workbook InputStream is = new FileInputStream(sourcefile);
Workbook rwb = Workbook.getWorkbook(is);
}catch (Exception e){
e.printStackTrace();
}
//獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
//一旦得到了Sheet,就可以訪問Excel Cell(術語:單元格)
//獲取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//獲取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//獲取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
//操作完成時,關閉對象,釋放占用的內存空間
rwb.close();
}
} 如果僅僅是取得Cell的值,可以通過getContents()方法,它將任何類型的Cell值都作為一個字符串返回。如果有需要知道Cell內容的確切類型,API也提供了一系列的方法。代碼片段如下:
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if (c00.getType() == CellType.LABEL) {
LabelCell labelc00 = (LabelCell) c00;
strc00 = labelc00.getString();
}
if (c10.getType() == CellType.NUMBER) {
NmberCell numc10 = (NumberCell) c10;
strc10 = numc10.getValue();
}
if (c11.getType() == CellType.DATE) {
DateCell datec11 = (DateCell) c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : "
+ c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : "
+ c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : "
+ c11.getType());
你可以分別通過如下命令
java -jar jxl.jar -xml test.xls
java -jar jxl.jar -cvs test.xls
以xml和cvs格式查看test.xls,這是因為JXL作者實現了一個用來演示的jxl.demo.Demo的類。
當然我們使用JXL主要是用它來動態讀寫Excel文件。現在就來看看JXL在對Excel的讀和寫上都提供了那些支持。
先來看看Excel文件中都有寫上面對象
1 文件對象 2工作簿對象 3 單元格對象。
相應的在JXL中就有Workbook,Sheet ,Cell 。通過這三個對象我們就可以實現Excel文件的讀取工作。
我們先想想一下讀取步驟,不管是什么樣的Excel操作框架必定都要經歷
1選取Excel文件,2選擇工作簿,3選擇Cell,4讀取信息。
那么現在就可以看看JXL中這四步驟如何體現:
//通過Workbook的靜態方法getWorkbook選取Excel文件
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));
//通過Workbook的getSheet方法選擇第一個工作簿(從0開始)
Sheet sheet = workbook.getSheet(0);
//通過Sheet方法的getCell方法選擇位置為C2的單元格(兩個參數都從0開始)
Cell c2 = sheet.getCell(2,1);
//通過Cell的getContents方法把單元格中的信息以字符的形式讀取出來
String stringc2 = c2.getContents();
可以看到正是剛才所說的四個步驟。
我們都知道Excel單元格是有格式的,那么這些信息如何取得。
Cell提供了一個getType方法能夠返回單元格的類型信息,同時JXL提供了一個CellType類用來預設Excel中的類型信息,而且JXL提供了一些Cell類的子類用來分別用來表示各種類型的單元格,如LabelCell,NumberCell,DateCell分別表示字符、數值、日期類型的單元格。所以我們可以這樣寫:
if (c2.getType() == CellType.NUMBER)
{
NumberCell nc = (NumberCell) c2;
numberb2 = nc.getValue();
}
最后不要忘記關閉workbook以釋放資源:
workbook.close();
現在總結一下:三個對象,四個步驟,注意格式。就可以輕松的從Excel文件中讀取數據.
例子請見
Java代碼
import java.io.*;
<BR>import jxl.*;
<BR>class ReadExcel{
<BR> public void readExcel(String sourcefile){
<BR> try{
<BR> //構建Workbook對象, 只讀Workbook對象
<BR> //直接從本地文件創建Workbook
<BR> //從輸入流創建
<BR> Workbook InputStream is = new FileInputStream(sourcefile);
<BR> Workbook rwb = Workbook.getWorkbook(is);
<BR> }catch (Exception e){
<BR> e.printStackTrace();
<BR> }
<BR> //獲取第一張Sheet表
<BR> Sheet rs = rwb.getSheet(0);
<BR> //一旦得到了Sheet,就可以訪問Excel Cell(術語:單元格)
<BR> //獲取第一行,第一列的值
<BR> Cell c00 = rs.getCell(0, 0);
<BR> String strc00 = c00.getContents();
<BR> //獲取第一行,第二列的值
<BR> Cell c10 = rs.getCell(1, 0);
<BR> String strc10 = c10.getContents();
<BR> //獲取第二行,第二列的值
<BR> Cell c11 = rs.getCell(1, 1);
<BR> String strc11 = c11.getContents();
<BR> System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
<BR> System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
<BR> System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
<BR> //操作完成時,關閉對象,釋放占用的內存空間
<BR> rwb.close();
<BR>
<BR> }
<BR>}
import java.io.*;
import jxl.*;
class ReadExcel{
public void readExcel(String sourcefile){
try{
//構建Workbook對象, 只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建
Workbook InputStream is = new FileInputStream(sourcefile);
Workbook rwb = Workbook.getWorkbook(is);
}catch (Exception e){
e.printStackTrace();
}
//獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
//一旦得到了Sheet,就可以訪問Excel Cell(術語:單元格)
//獲取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//獲取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//獲取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
//操作完成時,關閉對象,釋放占用的內存空間
rwb.close();
}
} 如果僅僅是取得Cell的值,可以通過getContents()方法,它將任何類型的Cell值都作為一個字符串返回。如果有需要知道Cell內容的確切類型,API也提供了一系列的方法。代碼片段如下:
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if (c00.getType() == CellType.LABEL) {
LabelCell labelc00 = (LabelCell) c00;
strc00 = labelc00.getString();
}
if (c10.getType() == CellType.NUMBER) {
NmberCell numc10 = (NumberCell) c10;
strc10 = numc10.getValue();
}
if (c11.getType() == CellType.DATE) {
DateCell datec11 = (DateCell) c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : "
+ c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : "
+ c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : "
+ c11.getType());
本文由用戶 ivy 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!