一、jxl.jar概述
- 通過java操作excel表格的工具類庫
- 支援Excel 95-2000的所有版本
- 生成Excel 2000標準格式
- 支援字型、數字、日期操作
- 能夠修飾單元格屬性
- 支援影象和圖表
應該說以上功能已經能夠大致滿足我們的需要。最關鍵的是這套API是純Java的,並不依賴Windows系統,即使執行在Linux下,它同樣能夠正確的處理Excel檔案。另外需要說明的是,這套API對圖形和圖表的支援很有限,而且僅僅識別PNG格式。
Java Excel API 文件
http://www.andykhan.com/jexcelapi/
二、搭建環境
將下載後的檔案解包,得到JXL.JAR,放入classpath。如果包不能正常的載入,可以把你下載好的JXL.JAR包放入本機jre的安裝目錄下,例如 D:\JAVA\jre\lib\ext中。如果想在Eclipse的一個專案中匯入JXL.JAR,在該專案上右鍵,點選“屬性”,類別那裡選擇”庫“,點選"新增外部jar”在彈出的檔案選擇對話方塊選擇你的jxl.jar。
三、創新檔案:
新建一個名"Test.xls"的Excel檔案,其中第一個工作表被命名為“sheet_one”,程式碼如下,編譯執行後,會在當前位置產生一個Excel檔案。
1 package com.test; 2 3 import jxl.*; 4 import java.io.*; 5 6 import jxl.write.*; 7 import jxl.write.biff.RowsExceededException; 8 9 public class CreateExcel { 10 11 public static void main(String[] args) throws RowsExceededException, WriteException{ 12 WritableWorkbook book; 13 try { 14 System.out.println("---start---"); 15 //開啟檔案 16 book = Workbook.createWorkbook(new File("Test.xls")); 17 18 //生成名為“第一頁”的工作表,引數0表示這是第一頁 19 WritableSheet sheet = book.createSheet("sheet_one", 0); 20 21 //在Label物件的構造中指名單元格位置是第一列第一行(0,0) 22 //以及單元格內容為Hello World 23 Label label = new Label(0,0,"Hello World"); 24 25 //將定義好的單元格新增到工作表中 26 sheet.addCell(label); 27 28 /*生成一個儲存數字的單元格 29 必須使用Number的完整包路徑,否則有語法歧義 30 單元格位置是第二列,第一行,值為789.123*/ 31 jxl.write.Number num = new jxl.write.Number(0,1,123.456); 32 sheet.addCell(num); 33 34 //寫入資料並關閉文 35 book.write(); 36 book.close(); 37 System.out.println("---end---"); 38 39 } catch (IOException e) { 40 System.out.println(e); 41 } 42 43 } 44 45 }
四、讀取檔案:
使用我們上面建立的Excel檔案為例,做一個簡單的讀取操作,程式程式碼如下:
1 package com.test; 2 3 import jxl.*; 4 import jxl.read.biff.BiffException; 5 6 import java.io.*; 7 8 public class ReadExcel { 9 10 public static void main(String[] args) throws BiffException, IOException { 11 Workbook book = Workbook.getWorkbook(new File("Test.xls")); 12 13 //獲得第一個工作表物件 14 Sheet sheet = book.getSheet("sheet_one"); 15 //Sheet sheet = book.getSheet(0); 16 17 int rows = sheet.getRows(); 18 int cols = sheet.getColumns(); 19 20 System.out.println("總列數:" + cols); 21 System.out.println("總行數:" + rows); 22 System.out.println("----------------------------"); 23 24 int i=0; 25 int j=0; 26 //迴圈讀取資料 27 for(i=0;i<cols;i++) 28 { 29 for(j=0;j<rows;j++) 30 { 31 System.out.println("第"+j+"行,第"+i+"列為:"+sheet.getCell(i, j).getContents()); 32 } 33 34 } 35 36 } 37 38 }
輸出結果:
總列數:1 總行數:2 ---------------------------- 第0行,第0列為:Hello World 第1行,第0列為:123.456
五、修改檔案:
利用jExcelAPI可以修改已有的Excel檔案,修改Excel檔案的時候,除了開啟檔案的方式不同之外,其他操作和建立Excel是一樣的。下面的例子是在我們已經生成的Excel檔案中新增一個工作表:
1 package com.test; 2 3 import jxl.*; 4 import java.io.*; 5 6 import jxl.read.biff.BiffException; 7 import jxl.write.*; 8 import jxl.write.biff.RowsExceededException; 9 10 11 public class UpdateExcel { 12 13 public static void main(String[] args) throws BiffException, IOException, RowsExceededException, WriteException{ 14 //獲得檔案 15 Workbook wb = Workbook.getWorkbook(new File ("Test.xls")); 16 17 //開啟一個檔案的副本,並且指定資料寫回到原檔案 18 WritableWorkbook book = Workbook.createWorkbook(new File ("Test.xls"), wb); 19 20 //新增一個工作表 21 WritableSheet sheet = book.createSheet("sheet_two", 1); 22 23 sheet.addCell(new Label(0,0,"Test data for sheet_two")); 24 25 //輸出 26 System.out.println(sheet.getCell(0, 0).getContents()); 27 28 book.write(); 29 book.close(); 30 31 } 32 33 }
輸出:
Test data for sheet_two