使用開源庫 JExcelApi (jxl) 讀寫 Excel 97-2003 格式 (.xls)。示範建立工作表、寫入標題、日期、數字與格式化儲存格,以及讀取指定儲存格/整行資料。注意:jxl 不支援 .xlsx (OOXML),新專案建議改用 Apache POI。
import java.io.File;
import java.util.*;
import jxl.*;
import jxl.write.*;
public class ExcelDemo {
Workbook wb;
Sheet sheet;
public void write() {
try {
WritableWorkbook wwb = Workbook.createWorkbook(new File("demo.xls"));
WritableSheet ws = wwb.createSheet("午餐記錄", 0);
// 標題
ws.addCell(new Label(0, 0, "時間"));
ws.addCell(new Label(1, 0, "姓名"));
ws.addCell(new Label(2, 0, "標準"));
ws.addCell(new Label(3, 0, "實際"));
// 日期格式
DateFormat df = new DateFormat("yyyy-dd-MM hh:mm:ss");
WritableCellFormat wcf = new WritableCellFormat(df);
ws.addCell(new jxl.write.DateTime(0, 1, new Date(), wcf));
// 文字
ws.addCell(new Label(1, 1, "riverwind"));
// 數字格式
NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat ncf = new WritableCellFormat(nf);
ws.addCell(new jxl.write.Number(2, 1, 13.1415926, ncf));
ws.addCell(new jxl.write.Number(3, 1, 10.50001, ncf));
wwb.write(); wwb.close();
} catch (Exception e) { e.printStackTrace(); }
}
public String[] readLine(int row) {
try {
int cols = sheet.getColumns();
String[] res = new String[cols];
for (int c = 0; c < cols; c++) {
Cell cell = sheet.getCell(c, row);
res[c] = cell.getContents();
}
return res;
} catch (Exception e) { e.printStackTrace(); return null; }
}
public static void main(String[] args) {
try {
ExcelDemo demo = new ExcelDemo();
demo.wb = Workbook.getWorkbook(new File("demo.xls"));
demo.sheet = demo.wb.getSheet(0);
String[] line = demo.readLine(1);
for (String s : line) System.out.println(s);
demo.write();
demo.wb.close();
} catch (Exception e) { e.printStackTrace(); }
}
}
遷移建議:
.xls 與 .xlsx,API 相似 (Workbook, Sheet, Row, Cell)。SXSSFWorkbook (串流模式) 降低記憶體佔用。