首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 操作 Excel 實戰:Java Excel API (JXL) 讀寫修改完整指南

     編輯:Java 相關知識

Web 應用常需匯出/匯入 Excel。單純產生 CSV 僅能讓瀏覽器呼叫 Excel 顯示,無法真正操作檔案。開源專案 Java Excel API (JXL) 以純 Java 實現讀取、建立、修改 Excel 97/2000 格式,跨平台、可在 JSP/Servlet 中直接呼叫。本文完整示範三大核心場景。

核心類別架構

  • Workbook:工作簿(唯一入口)
  • Sheet:工作表
  • Cell:儲存格(Label 文字、Number 數值、DateTime 日期、Boolean 布林)
  • WritableWorkbook/WritableSheet/WritableCell:可寫入版本

場景一:讀取 Excel 檔案

// 1. 建立唯讀 Workbook
InputStream is = new FileInputStream("source.xls");
Workbook rwb = Workbook.getWorkbook(is);

// 2. 取得 Sheet(索引從 0 起)
Sheet rs = rwb.getSheet(0);

// 3. 讀取 Cell
Cell c00 = rs.getCell(0, 0);  // (col, row)
String val = c00.getContents();  // 任何型別轉字串

// 4. 型別判斷與強轉取精確值
if (c00.getType() == CellType.LABEL) {
    LabelCell lc = (LabelCell) c00;
    String text = lc.getString();
} else if (c00.getType() == CellType.NUMBER) {
    NumberCell nc = (NumberCell) c00;
    double num = nc.getValue();
} else if (c00.getType() == CellType.DATE) {
    DateCell dc = (DateCell) c00;
    Date date = dc.getDate();
}

// 5. 釋放資源
rwb.close();

場景二:建立新 Excel 檔案

// 1. 建立可寫入 Workbook(工廠方法,不可 new)
WritableWorkbook wwb = Workbook.createWorkbook(new File("target.xls"));
// 或寫入 OutputStream:Workbook.createWorkbook(os)

// 2. 建立 Sheet(名稱, 索引)
WritableSheet ws = wwb.createSheet("Test Sheet", 0);

// 3. 新增儲存格(位置在建構子指定,不可變更)
// 文字
ws.addCell(new Label(0, 0, "一般文字"));
// 帶字型格式
WritableFont wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableCellFormat wcf = new WritableCellFormat(wf);
ws.addCell(new Label(1, 0, "粗體斜體", wcf));
// 紅色字體
WritableFont redFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.RED);
ws.addCell(new Label(2, 0, "紅字", new WritableCellFormat(redFont)));
// 數值 + 格式
NumberFormat nf = new NumberFormat("#.##");
ws.addCell(new Number(0, 1, 3.1415926, new WritableCellFormat(nf)));
// 日期 + 格式
DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
ws.addCell(new DateTime(0, 2, new Date(), new WritableCellFormat(df)));

// 4. 寫入磁碟並關閉(順序不可顛倒!)
wwb.write();
wwb.close();

場景三:修改現有 Excel(複製再寫入)

// 1. 讀取原檔
Workbook rwb = Workbook.getWorkbook(new File("source.xls"));

// 2. 以原檔建立可寫入副本
WritableWorkbook wwb = Workbook.createWorkbook(new File("target.xls"), rwb);
WritableSheet ws = wwb.getSheet(0);

// 3. 取得可寫入 Cell 並修改
WritableCell wc = ws.getWritableCell(0, 0);
if (wc.getType() == CellType.LABEL) {
    ((Label) wc).setString("已修改內容");
}

// 4. 亦可新增新 Cell
ws.addCell(new Label(5, 5, "新增欄位"));

// 5. 寫入並關閉兩個 Workbook
wwb.write();
wwb.close();
rwb.close();

常用 API 速查

類別方法說明
WorkbookgetNumberOfSheets()工作表數量
WorkbookgetSheets()所有 Sheet 陣列
SheetgetName()Sheet 名稱
SheetgetColumns()/getRows()總欄/列數
SheetgetColumn(i)/getRow(i)取得整欄/列 Cell 陣列
SheetgetCell(col, row)取得指定 Cell

補充:Apache POI 替代方案

JXL 僅支援 Excel 97 (.xls)。需支援 .xlsx (OOXML) 請改用 Apache POI,功能更強大、社群更活躍。文末附 POI 建立 50x50 矩陣範例。

注意事項

  • JXL 非執行緒安全,多執行緒環境需同步
  • 大檔案記憶體佔用高(雙 Workbook),注意 OOM
  • 公式:可讀取計算結果,無法建立/修改公式
  • 圖表、巨集、樞紐分析表不支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved