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

JXL 庫建立 Excel 報表完整教學:從樣式設定到資料寫入

     編輯:Java 程式設計入門

JXL (Java Excel API) 是純 Java 實現的 Excel 操作庫,無需依賴 Microsoft Office 即可在 Linux/Unix 伺服器端生成 .xls 格式報表,極適合 Web 應用的後端匯出功能。本文詳細示範從儲存格樣式定義、表頭表體渲染到檔案輸出的完整流程。

核心功能展示

  • 樣式分離設計:表頭(黃底粗體置中粗框)、表體(白底細框、首尾欄置中)獨立封裝
  • 動態資料綁定:支援字串陣列作為表頭與多行資料來源
  • 格線控制:可選擇隱藏工作表格線提升視覺效果

建立 Excel 核心程式碼

package com.yonyou.test;

import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.format.*;
import jxl.write.*;

public class JxlTable {
    private static final JxlTable INSTANCE = new JxlTable();

    public static JxlTable getInstance() { return INSTANCE; }

    private JxlTable() {}

    public boolean createTable(String header, String[] body, String filePath) {
        WritableWorkbook book = null;
        try {
            book = Workbook.createWorkbook(new File(filePath));
            WritableSheet sheet = book.createSheet("報表", 0);
            
            sheet.setColumnView(1, 5);
            sheet.getSettings().setShowGridLines(false);

            // 表頭處理
            String[] headers = header.split(",");
            for (int i = 0; i < headers.length; i++) {
                Label label = new Label(1 + i, 1, headers[i], getHeaderCellStyle());
                sheet.addCell(label);
            }

            // 表體處理
            for (int row = 0; row < body.length; row++) {
                String[] cells = body[row].split(",");
                for (int col = 0; col < cells.length; col++) {
                    WritableCellFormat style = getBodyCellStyle();
                    if (col == 0 || col == cells.length - 1) {
                        style.setAlignment(Alignment.CENTRE);
                    }
                    Label label = new Label(1 + col, 2 + row, cells[col], style);
                    sheet.addCell(label);
                }
            }

            book.write();
            return true;
        } catch (IOException | RowsExceededException | WriteException e) {
            e.printStackTrace();
            return false;
        } finally {
            if (book != null) {
                try { book.close(); } catch (Exception ignored) {}
            }
        }
    }

    private WritableCellFormat getHeaderCellStyle() {
        WritableFont font = new WritableFont(WritableFont.createFont("微軟正黑體"), 10, WritableFont.BOLD);
        WritableCellFormat format = new WritableCellFormat(font);
        try {
            format.setBackground(Colour.YELLOW);
            format.setBorder(Border.ALL, BorderLineStyle.THICK, Colour.BLACK);
            format.setAlignment(Alignment.CENTRE);
        } catch (WriteException e) {
            e.printStackTrace();
        }
        return format;
    }

    private WritableCellFormat getBodyCellStyle() {
        WritableFont font = new WritableFont(WritableFont.createFont("微軟正黑體"), 10);
        WritableCellFormat format = new WritableCellFormat(font);
        try {
            format.setBackground(Colour.WHITE);
            format.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
        } catch (WriteException e) {
            e.printStackTrace();
        }
        return format;
    }

    public static void main(String[] args) {
        String header = "編號,姓名,性別,年齡";
        String[] body = {
            "1,歐陽鋒,男,68",
            "2,黃藥師,男,67",
            "3,洪七公,男,70",
            "4,郭靖,男,32"
        };
        JxlTable.getInstance().createTable(header, body, "e:/test.xls");
    }
}

讀取 Excel 關鍵 API 快速參考

操作方法說明
建立 WorkbookWorkbook.getWorkbook(File/InputStream)支援檔案與串流兩種來源
獲取工作表wb.getSheet(0) / wb.getSheets()索引或取得全部 Sheet 陣列
讀取儲存格sheet.getCell(col, row).getContents()取得字串值,另可用 getType() 判斷型別
關閉資源wb.close()釋放記憶體,大量讀取時務必呼叫

常用 Sheet 介面方法

  • getName():取得工作表名稱
  • getColumns() / getRows():取得總欄數/總列數
  • getColumn(index) / getRow(index):取得整欄/整列儲存格陣列

遷移建議

JXL 僅支援舊版 .xls 格式(BIFF8),且已停止維護。新專案建議改用 Apache POI(支援 .xlsx、功能更豐富)或 EasyExcel(記憶體效能更佳),僅在維護舊系統時續用 JXL。

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