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

Java 導出 Excel 報表實戰:Apache POI 庫完整應用指南

     編輯:Java 相關知識

背景:為什麼選 Excel 作為報表輸出格式?

報表輸出是數據庫應用常見需求。通用報表缺乏靈活性,用戶難以個性化編輯。Excel 作為 Windows 平台優秀電子表格工具,導出 Excel 格式可讓用戶利用其強大功能二次編輯,滿足特殊需求。Java 跨平台特性導致無法直接操作 Excel,Apache Jakarta POI 專案提供純 Java 解決方案,支持 MS Excel 97-2002 格式,已趨成熟,國內多家公司在 OA、Web 項目中應用。

POI 獲取與安裝

  1. 下載:https://jakarta.apache.org/site/downloads/downloads_poi.cgi → poi-bin-2.5.1-final-20040804.zip。
  2. 解壓,核心 JAR:poi-2.5.1-final-20040804.jar。
  3. 將 JAR 路徑加入系統 classpath 或項目依賴。

POI 目錄結構

POI 核心對象模型

POI 對象對應 Excel 概念
HSSFWorkbook工作簿
HSSFSheet工作表
HSSFRow行
HSSFCell單元格

主要包:org.apache.poi.hssf.usermodel,含樣式、格式、輔助操作類。

入門範例:創建與讀取 Excel 文件

import org.apache.poi.hssf.usermodel.*;
import java.io.*;

public class CreateXL {
    public static String xlsFile = "test.xls";
    
    public static void main(String args[]) {
        try {
            // 創建工作簿、工作表
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet();
            workbook.setSheetName(0, "firstSheet", HSSFWorkbook.ENCODING_UTF_16); // 支持中文
            
            // 創建行、單元格,寫入內容
            HSSFRow row = sheet.createRow((short) 0);
            HSSFCell cell = row.createCell((short) 0);
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 中文編碼
            cell.setCellValue("測試成功");
            
            // 寫入文件
            FileOutputStream fOut = new FileOutputStream(xlsFile);
            workbook.write(fOut);
            fOut.flush(); fOut.close();
            System.out.println("文件生成...");
            
            // 讀取驗證
            FileInputStream fIn = new FileInputStream(xlsFile);
            HSSFWorkbook readWorkBook = new HSSFWorkbook(fIn);
            HSSFSheet readSheet = readWorkBook.getSheet("firstSheet");
            HSSFRow readRow = readSheet.getRow(0);
            HSSFCell readCell = readRow.getCell((short) 0);
            System.out.println("第一個單元格: " + readCell.getStringCellValue());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

進階應用:數據庫結果集導出 Excel

結合 JDBC,將 ResultSet 導出為 Excel 報表:

public static void resultSetToExcel(ResultSet rs, String xlsName, String sheetName) throws Exception {
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet();
    workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);
    
    // 寫入列名
    HSSFRow row = sheet.createRow((short) 0);
    ResultSetMetaData md = rs.getMetaData();
    int nColumn = md.getColumnCount();
    for (int i = 1; i <= nColumn; i++) {
        HSSFCell cell = row.createCell((short) (i - 1));
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell.setCellValue(md.getColumnLabel(i));
    }
    
    // 寫入數據行
    int iRow = 1;
    while (rs.next()) {
        row = sheet.createRow((short) iRow);
        for (int j = 1; j <= nColumn; j++) {
            HSSFCell cell = row.createCell((short) (j - 1));
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            cell.setEncoding(HSSFCell.ENCODING_UTF_16);
            cell.setCellValue(rs.getObject(j).toString());
        }
        iRow++;
    }
    
    FileOutputStream fOut = new FileOutputStream(xlsName);
    workbook.write(fOut);
    fOut.flush(); fOut.close();
    JOptionPane.showMessageDialog(null, "導出數據成功!");
}

POI 更多能力(文中提及,篇幅所限未展開)

  • 單元格格式設置(數字、日期、貨幣等)
  • 頁眉頁腳設置
  • 樣式與字體控制
  • 公式計算
  • 圖表生成

詳細請參考 POI 幫助文檔(解壓目錄 doc 文件夾)。

現代補充:POI 版本演進

文中基於 POI 2.5.1(2004 年)。現代項目應使用 Apache POI 5.x+:

  • 支持 .xlsx (OOXML) 格式,突破 65536 行限制。
  • 模塊化:poi (HSSF)、poi-ooxml (XSSF)、poi-ooxml-schemas。
  • Maven 坐標:org.apache.poi:poi:5.2.3 / org.apache.poi:poi-ooxml:5.2.3。
  • SXSSF 流式 API 處理超大數據導出,低內存佔用。

總結

POI 功能強大,較好解決 Java 編程中的 Excel 報表問題,進一步滿足用戶靈活編輯需求。

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