22 January 2007

JExcelAPI 的小筆記

讀取既有 excel 檔並開始修改:

Workbook template = null;
WritableWorkbook workbook =  null;
try {
	template = Workbook.getWorkbook(new File("template.xls"));
	workbook = Workbook.createWorkbook(new File("newExcel.xls"),template);
	Sheet sheet = workbook.getSheet(0) ; //拿第一 sheet

	//做一些事 ....

	workbook.write();// 寫入
} finally {
	try {
		if (template != null) {
			template.close();
		}
	} finally {
		if (workbook != null) {
			workbook.close();
		}
	}
}

讀取既有儲存格並修改:

//0, 1 是欄與列的 index,代表 A2。
Label a2 = (Label) sheet.getWritableCell(0, 1) ; //已知 A2 為文字欄位
a2.setString("my content at A2");

//已知 E4 為日期欄位
DateTime orderTime = (DateTime) sheet.getCell(4, 3);
orderTime.setDate(createDate);

新增儲存格:

Label b2label = new Label(1, 1, "B2 content"); //文字
sheet.addCell(b2label);
Number b3number = new Number(1, 2, 13); //數字
sheet.addCell(b3number);

變更儲存格樣式:

WritableCellFormat cellFormat = new WritableCellFormat();

//儲存格文字過長換行
cellFormat.setWrap(true); 

//垂直向上對齊
cellFormat.setVerticalAlignment(VerticalAlignment.TOP); 

//水平置中對齊
cellFormat.setAlignment(Alignment.CENTER); 

//上面加框線,粗細設為中等
cellFormat.setBorder(Border.TOP, BorderLineStyle.MEDIUM);

//設定 Tahoma 字型,大小 12 
WritableFont font12 = new WritableFont(WritableFont.TAHOMA, 12);
cellFormat.setFont(font12);

Label b2label = new Label(1, 1, "B2 content");
b2label.setCellFormat(cellFormat); //設定儲存格樣式
sheet.addCell(b2label);

設定數字格式:

//按 excel 格式語法新增一 NumberFormat
NumberFormat numberFormat = new NumberFormat("#,##0.##") ;

//依NumberFormat 建立 cellFormat
WritableCellFormat cellFormat = new WritableCellFormat(numberFormat);
Number b2 = new Number(1, 1, 1201.1);
b2.setCellFormat(cellFormat); 
sheet.addCell(b2); //顯示結果為 1,201.1

// NumberFormat 格式說明: 0 代表一定顯示,# 代表有才顯示。
new NumberFormat("#,000");   //此格式最少顯示3個整數位,忽略任何小數
new NumberFormat("#,##0.##") //此格式最少顯示1個整數位,最多顯示到兩位小數

合併儲存格:

sheet.mergeCells(3, 7, 6, 7); //合併 D7~G7 四格
Label d7_to_g7 = new Label(3, 7, "a content in merged cell");
sheet.addCell(d7_to_g7);

回響

可以用 Tag <I>、<B>,程式碼請用 <PRE>