public static void main(String args[]) throws BiffException, IOException, WriteException{ //1 從Excel文件讀取數(shù)據(jù)表
//Java Excel API既可以從本地文件系統(tǒng)的一個(gè)文件(.xls),也可以從輸入流中讀取Excel數(shù)據(jù)表。 //讀取Excel數(shù)據(jù)表的第一步是創(chuàng)建Workbook(術(shù)語(yǔ):工作薄),下面的代碼片段舉例說(shuō)明了應(yīng)該如何操作: //(完整代碼見(jiàn)ExcelReading.java) try { //構(gòu)建Workbook對(duì)象, 只讀Workbook對(duì)象 //直接從本地文件創(chuàng)建Workbook //從輸入流創(chuàng)建Workbook InputStream is = new FileInputStream("D:/user.xls"); jxl.Workbook rwb = Workbook.getWorkbook(is);
//一旦創(chuàng)建了Workbook,我們就可以通過(guò)它來(lái)訪問(wèn)Excel Sheet(術(shù)語(yǔ):工作表)。參考下面的代碼片段:
//獲取第一張Sheet表 Sheet rs = (Sheet) rwb.getSheet(0); //我們既可能通過(guò)Sheet的名稱來(lái)訪問(wèn)它,也可以通過(guò)下標(biāo)來(lái)訪問(wèn)它。如果通過(guò)下標(biāo)來(lái)訪問(wèn)的話, //要注意的一點(diǎn)是下標(biāo)從0開(kāi)始,就像數(shù)組一樣。
//一旦得到了Sheet,我們就可以通過(guò)它來(lái)訪問(wèn)Excel Cell(術(shù)語(yǔ):?jiǎn)卧?。參考下面的代碼片段:
//獲取第一行,第一列的值 Cell c00 = ((jxl.Sheet) rs).getCell(0, 0); String strc00 = c00.getContents();
//獲取第一行,第二列的值 Cell c10 = ((jxl.Sheet) rs).getCell(1, 0); String strc10 = c10.getContents();
//獲取第二行,第二列的值 Cell c11 = ((jxl.Sheet) 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());
//如果僅僅是取得Cell的值,我們可以方便地通過(guò)getContents()方法, //它可以將任何類型的Cell值都作為一個(gè)字符串返回。示例代碼中Cell(0, 0)是文本型, //Cell(1, 0)是數(shù)字型,Cell(1,1)是日期型,通過(guò)getContents(),三種類型的返回值都是字符型。
//如果有需要知道Cell內(nèi)容的確切類型,API也提供了一系列的方法。參考下面的代碼片段:
String strcc00 = null; double strcc10 = 0.00; Date strcc11 = null;
Cell cc00 = ((jxl.Sheet) rs).getCell(0, 0); Cell cc10 = ((jxl.Sheet) rs).getCell(1, 0); Cell cc11 = ((jxl.Sheet) rs).getCell(1, 1);
if(c00.getType() == CellType.LABEL) { LabelCell labelc00 = (LabelCell)cc00; strcc00 = labelc00.getString(); } if(c10.getType() == CellType.NUMBER) { NumberCell numc10 = (NumberCell)cc10; strcc10 = numc10.getValue(); } if(c11.getType() == CellType.DATE) { DateCell datec11 = (DateCell)cc11; strcc11 = datec11.getDate(); }
System.out.println("Cell(0, 0)" + " value : " + strcc00 + "; type : " + cc00.getType()); System.out.println("Cell(1, 0)" + " value : " + strcc10 + "; type : " + cc10.getType()); System.out.println("Cell(1, 1)" + " value : " + strcc11 + "; type : " + cc11.getType());
//在得到Cell對(duì)象后,通過(guò)getType()方法可以獲得該單元格的類型,然后與API提供的基本類型相匹配, //強(qiáng)制轉(zhuǎn)換成相應(yīng)的類型,最后調(diào)用相應(yīng)的取值方法getXXX(),就可以得到確定類型的值。 //API提供了以下基本類型,與Excel的數(shù)據(jù)格式相對(duì)應(yīng),如下圖所示:
//每種類型的具體意義,請(qǐng)參見(jiàn)Java Excel API Document。
//當(dāng)你完成對(duì)Excel電子表格數(shù)據(jù)的處理后,一定要使用close()方法來(lái)關(guān)閉先前創(chuàng)建的對(duì)象, //以釋放讀取數(shù)據(jù)表的過(guò)程中所占用的內(nèi)存空間,在讀取大量數(shù)據(jù)時(shí)顯得尤為重要。參考如下代碼片段:
//操作完成時(shí),關(guān)閉對(duì)象,釋放占用的內(nèi)存空間 rwb.close();
} catch (Exception e) { e.printStackTrace(); }
//Java Excel API提供了許多訪問(wèn)Excel數(shù)據(jù)表的方法,在這里我只簡(jiǎn)要地介紹幾個(gè)常用的方法, //其它的方法請(qǐng)參考附錄中的Java Excel API Document。
//Workbook類提供的方法
//1. int getNumberOfSheets(); //獲得工作薄(Workbook)中工作表(Sheet)的個(gè)數(shù),示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File("D:/user.xls")); int sheets = rwb.getNumberOfSheets();
//2. Sheet[] getSheets(); //返回工作?。╓orkbook)中工作表(Sheet)對(duì)象數(shù)組,示例:
jxl.Workbook rwb2 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); Sheet[] sheets2 = (Sheet[]) rwb2.getSheets();
//3. String getVersion(); //返回正在使用的API的版本號(hào),好像是沒(méi)什么太大的作用。
jxl.Workbook rwb3 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); String apiVersion = rwb3.getVersion();
//Sheet接口提供的方法
//1) String getName(); //獲取Sheet的名稱,示例:
jxl.Workbook rwb4 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs = rwb4.getSheet(0); String sheetName = rs.getName();
//2) int getColumns() //獲取Sheet表中所包含的總列數(shù),示例:
jxl.Workbook rwb5 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs2 = rwb5.getSheet(0); int rsColumns = rs2.getColumns();
//3) Cell[] getColumn(int column) //獲取某一列的所有單元格,返回的是單元格對(duì)象數(shù)組,示例:
jxl.Workbook rwb6 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs3 = rwb6.getSheet(0); Cell[] cell = rs3.getColumn(0);
//4) int getRows() //獲取Sheet表中所包含的總行數(shù),示例:
jxl.Workbook rwb7 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs4 = rwb7.getSheet(0); int rsRows = rs4.getRows();
//5) Cell[] getRow(int row) //獲取某一行的所有單元格,返回的是單元格對(duì)象數(shù)組,示例子:
jxl.Workbook rwb8 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs5 = rwb8.getSheet(0); Cell[] cell5 = rs5.getRow(0);
//6) Cell getCell(int column, int row) //獲取指定單元格的對(duì)象引用,需要注意的是它的兩個(gè)參數(shù),第一個(gè)是列數(shù),第二個(gè)是行數(shù), //這與通常的行、列組合有些不同。
jxl.Workbook rwb9 = jxl.Workbook.getWorkbook(new File("D:/user.xls")); jxl.Sheet rs6 = rwb9.getSheet(0); Cell cell6 = rs6.getCell(0, 0);
|