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

JavaExcelApi (JXL) 實戰指南:從零創建 Excel 文件

     編輯:J2ME

前言:輕量級 Excel 生成利器

JXL (JavaExcelApi) 是純 Java 實現、無需 POI 重型依賴、體積極小(~300KB)的 Excel 讀寫庫,極適合 J2SE 桌面工具、報表導出、甚至 J2ME 端緩存數據導出(配合文件系統)。本文聚焦寫入流程,手把手教你生成規範的 .xls (BIFF8) 文件。

一、 核心對象層級

WritableWorkbook (文件) → WritableSheet (工作表) → WritableCell (單元格)
    ↑                    ↑                    ↑
Workbook.createWorkbook()  createSheet(name, index)  new Label/Number/DateTime(...)

二、 關鍵規則(必讀,避坑)

  1. 座標系:(column, row),均從 0 開始。A1 = (0,0),B1 = (1,0),A2 = (0,1)。
  2. 單元格不可移動:構造時座標已定,後續只能修改內容,不能改位置。
  3. 寫入順序:創建 Workbook → 創建 Sheet → 批量 addCell() → workbook.write() → workbook.close()(釋放內存/句柄)。
  4. 數字類型:必須用 jxl.write.Number(全限定名),避免與 java.lang.Number 衝突。

三、 完整最小化示例

import java.io.File;
import jxl.*;
import jxl.write.*;

public class CreateXLS {
    public static void main(String[] args) {
        WritableWorkbook wb = null;
        try {
            // 1. 創建可寫工作簿
            wb = Workbook.createWorkbook(new File("output.xls"));

            // 2. 創建工作表
            WritableSheet sheet = wb.createSheet("第一頁", 0);

            // 3. 寫入字符串 (Label)
            Label label = new Label(0, 0, "Hello JXL");
            sheet.addCell(label);

            // 4. 寫入數字 (Number)
            jxl.write.Number num = new jxl.write.Number(1, 0, 3.14159);
            sheet.addCell(num);

            // 5. 寫入日期 (需格式化)
            WritableCellFormat dateFmt = new WritableCellFormat(
                new DateFormat("yyyy-MM-dd HH:mm:ss"));
            DateTime dt = new DateTime(0, 1, new java.util.Date(), dateFmt);
            sheet.addCell(dt);

            // 6. 合併儲存格 (A2:B2)
            sheet.mergeCells(0, 1, 1, 1);

            // 7. 設置列寬
            sheet.setColumnView(0, 20); // 第 0 列寬 20 字符

            // 8. 刷新並關閉
            wb.write();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (wb != null) {
                try { wb.close(); } catch (Exception ignore) {}
            }
        }
    }
}

四、 進階技巧:樣式、公式、圖片

需求實現要點
字體/顏色/對齊/邊框WritableFont + WritableCellFormat,sheet.addCell(new Label(c,r,"txt",fmt))
公式WritableCellFormula,如 new WritableCellFormula(0,2,"SUM(A1:B1)")
圖片JXL 不支持寫入圖片,需遷移 Apache POI
大數據量流式寫入JXL 全內存模型,>1萬行易 OOM;大數據請用 POI SXSSF

五、 常見異常與排查

  • WriteException: Cell already exists:同座標重複 addCell,檢查循環邏輯。
  • IOException: Permission denied:文件被 Excel 打開佔用,關閉後重試。
  • OutOfMemoryError:數據量過大,分批生成多文件或換 POI 流式 API。

六、 總結

JXL 以極簡 API 實現 Excel 導出,「Workbook→Sheet→Cell」三步走,配合 WritableCellFormat 處理樣式,滿足 90% 報表導出需求。記住寫入後必須 write() 並 close(),否則文件損壞或 0 字節。若需 .xlsx、圖片、百萬行,請無痛升級 Apache POI。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved