2009年3月12日 星期四

JXL - 使用JXL讀取以及寫入Excel檔

寫一個程式,可以依據Excel裡的某一column資料,篩選出所想要的資料。 篩選出所要的資料,存入另外一個excel檔案。

第一步:下載jxl.jar
http://sourceforge.net/projects/jexcelapi/
解壓縮之後,將所有解壓出來的東西放入datapath裡。

第二步:程式內,import的部分
import jxl.*; import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.read.biff.BiffException;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
因為需要讀取舊有的xls檔案,篩選後寫入新的xls檔,故需要import如此之多...

以下分為兩個部分,
第一部分:讀取舊有的xls檔案

3.1:宣告一個工作表,好暫存要處理的資料
String input=”test.txt”;
workbook = Workbook.getWorkbook(new File(input)); //讀取工作表
//使用getWorkbook,代表去取得舊有的xls工作表。

3.2 指定讀取工作表的第幾個Sheet
Sheet sheet = workbook.getSheet(0); //指定工作表的讀取第一個SHEET

3.3讀取舊有的Cell內容
Cell cell1;
int rows=sheet.getRows();
for(i=1;i第二部分:寫入新的xls檔案
4.1 創一個新的工作表,為寫入file做準備。
String output=”output.txt”;
workbook2 = Workbook.createWorkbook(new File(output)); //輸出的FILE

4.2 創造sheet
Sheet sheet2 = workbook2.createSheet("Result of SerialNum Filter", 0); //創造sheet,第一個參數為SHEET名稱,且指定為第一個SHEET(從0開始)

4.3 設定輸出的每一個cell的格式,包含背景、顏色、框線
4.3.1設定一個字型檔
WritableFont chFont11w = new WritableFont(WritableFont.TIMES, 12); //設定新開的檔案的字型
chFont11w.setColour(Colour.BLACK); //字體黑色
4.3.2讀入所設定的好的字型檔
WritableCellFormat cellFormat1 = new WritableCellFormat ();
cellFormat1.setFont(chFont11w); //讀入剛剛設定的字型
cellFormat1.setBackground(Colour.WHITE); //設定CELL背景
cellFormat1.setAlignment(Alignment.CENTRE); //設定置中
cellFormat1.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); //設定框線

4.4設定寫入的cell內容
jxl.write.Label label01 = new jxl.write.Label(1,0,"系所名稱",cellFormat1);

在這裡是設定一個Cell的內容,位置為(0,1)也就是B1。
一般寫程式是Row major,通常第一個參數是指第幾row。
但是在使用excel時,我們常常以D3等等稱呼一個Cell,D代表的是第幾個Column,3代表第三列,是將Column放在前面的。這與平常使用方法不同,因此雖然參數是(1,0)但是是指B1,不是A2喔!
以及Column、Row起點都是0,因此A1在寫入時,要指定(0,0)!

第三個參數是寫入的數值,可以寫入String,也可以是Integer,但是我嘗試寫入double失敗了,要寫入大的數字的話,應該有其他的辦法。

最後一個是讀入剛剛設定好的字型。

這個步驟要特別的注意!!
這裡的label與GUI的label是一樣的拼法,要注意宣告。

4.5:將設定好的Cell內容寫入sheet裡。
((WritableSheet) sheet2).addCell(label00);
設定剛剛的sheet是可以寫入的,然後才可以增加cell進去。


第五步:最後記得將所有的Cell以及sheet設定寫入,還有close囉!
workbook2.write();
workbook2.close();

這裡注意點是,不可寫入之後還要重複寫入:
workbook2.write();

workbook2.write();
workbook2.close();

如此只有第一個的write有效,這是一次性寫入的,只可寫入1次!
第二個write不會判斷為error,但是寫入會無效。

沒有留言: