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

Java 操作 Office 文件完整指南:Word、Excel 與 PDF 處理實戰

     編輯:Java 相關知識

前言

在企業級應用開發中,以程式方式操作 Microsoft Office 文件是常見需求。本文整理三種主流方案:使用 Jacob 操作 Word、JExcelAPI 處理 Excel,並簡述 PDF 處理方向。

一、Jacob 操作 Word 文件

Jacob (Java-COM Bridge) 透過 COM 介面呼叫 Word 應用程式,功能強大但需在 Windows 環境執行。

核心類別設計:WordBean

import com.jacob.activeX.*;
import com.jacob.com.*;

public class WordBean extends java.awt.Panel {
    private ActiveXComponent wordApp = null;
    private Dispatch document = null;

    // 啟動 Word,可選擇是否顯示視窗
    public void openWord(boolean visible) {
        if (wordApp == null) {
            wordApp = new ActiveXComponent("Word.Application");
        }
        Dispatch.put(wordApp, "Visible", new Variant(visible));
    }

    // 建立新文件
    public void createNewDocument() {
        Dispatch documents = Dispatch.get(wordApp, "Documents").toDispatch();
        document = Dispatch.call(documents, "Add").toDispatch();
    }

    // 插入文字於游標位置
    public void insertText(String text) {
        Dispatch selection = Dispatch.get(wordApp, "Selection").toDispatch();
        Dispatch.put(selection, "Text", text);
    }

    // 另存新檔
    public void saveAs(String filename) {
        Dispatch.call(document, "SaveAs", filename);
    }

    // 列印文件
    public void print() {
        Dispatch.call(document, "PrintOut");
    }

    // 關閉文件(不儲存變更)
    public void closeDocument() {
        Dispatch.call(document, "Close", new Variant(0));
        document = null;
    }

    // 完全退出 Word
    public void quitWord() {
        Dispatch.call(wordApp, "Quit");
        wordApp = null;
        document = null;
    }
}

使用範例

public class WordTest {
    public static void main(String[] args) {
        WordBean word = new WordBean();
        word.openWord(true);           // 顯示 Word 視窗
        word.createNewDocument();      // 建立新文件
        word.insertText("Hello World from Java!");
        word.saveAs("C:\\test.doc");   // 儲存
        word.closeDocument();
        word.quitWord();
    }
}

二、JExcelAPI 操作 Excel 試算表

JExcelAPI (jxl) 為純 Java 實作,跨平台支援讀寫 .xls 格式(不支援 .xlsx)。

1. 讀取 Excel 資料

import java.io.*;
import jxl.*;

public class ExcelReader {
    public static void readExcel(String filePath) {
        try {
            // 從檔案或輸入流建立唯讀 Workbook
            Workbook workbook = Workbook.getWorkbook(new File(filePath));
            
            // 取得第一個工作表
            Sheet sheet = workbook.getSheet(0);
            
            // 讀取儲存格內容
            Cell cell = sheet.getCell(0, 0); // A1 儲存格
            System.out.println("A1 值: " + cell.getContents());
            System.out.println("A1 型別: " + cell.getType());
            
            // 依型別取得精確值
            if (cell.getType() == CellType.NUMBER) {
                NumberCell numCell = (NumberCell) cell;
                double value = numCell.getValue();
            }
            
            workbook.close(); // 釋放資源
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 建立新 Excel 檔案

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

public class ExcelWriter {
    public static void createExcel(String filePath) {
        try {
            // 建立可寫入 Workbook
            WritableWorkbook workbook = Workbook.createWorkbook(new File(filePath));
            WritableSheet sheet = workbook.createSheet("報表", 0);
            
            // 1. 一般文字
            sheet.addCell(new Label(0, 0, "產品名稱"));
            sheet.addCell(new Label(1, 0, "價格"));
            
            // 2. 帶格式文字(粗體、字體、顏色)
            WritableFont boldFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD);
            WritableCellFormat boldFormat = new WritableCellFormat(boldFont);
            sheet.addCell(new Label(0, 1, "筆記型電腦", boldFormat));
            
            WritableFont redFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, 
                UnderlineStyle.NO_UNDERLINE, Colour.RED);
            WritableCellFormat redFormat = new WritableCellFormat(redFont);
            sheet.addCell(new Label(1, 1, "NT$ 45,000", redFormat));
            
            // 3. 數值與格式化
            NumberFormat priceFormat = new NumberFormat("#,##0.00");
            WritableCellFormat numFormat = new WritableCellFormat(priceFormat);
            sheet.addCell(new Number(1, 2, 45000.00, numFormat));
            
            // 4. 日期時間
            DateFormat dateFormat = new DateFormat("yyyy/MM/dd HH:mm:ss");
            WritableCellFormat dateCellFormat = new WritableCellFormat(dateFormat);
            sheet.addCell(new DateTime(0, 3, new java.util.Date(), dateCellFormat));
            
            // 寫入磁碟並關閉
            workbook.write();
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 修改現有 Excel 檔案

public class ExcelModifier {
    public static void modifyExcel(String srcPath, String destPath) {
        try {
            // 開啟唯讀與可寫入兩個 Workbook
            Workbook readOnly = Workbook.getWorkbook(new File(srcPath));
            WritableWorkbook writable = Workbook.createWorkbook(new File(destPath), readOnly);
            
            WritableSheet sheet = writable.getSheet(0);
            WritableCell cell = sheet.getWritableCell(0, 0);
            
            // 修改儲存格內容(保留原格式)
            if (cell.getType() == CellType.LABEL) {
                Label label = (Label) cell;
                label.setString("已更新: " + label.getString());
            }
            
            writable.write();
            writable.close();
            readOnly.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、PDF 處理方向建議

  • iText / iText 7:功能最完整,可建立、修改、簽署 PDF,AGPL 授權需注意商業用途
  • Apache PDFBox:Apache 授權,適合文字擷取、表單填寫、列印
  • Flying Saucer (xhtmlrenderer):將 HTML/CSS 轉 PDF,適合報表產生

技術選型比較表

庫支援格式跨平台授權適用場景
Jacob.doc, .docx僅 WindowsLGPL需完整 Word 功能、郵件合併
JExcelAPI.xls是LGPL簡單 .xls 讀寫、舊系統相容
Apache POI.xls, .xlsx是Apache 2.0現代 Excel 處理首選
iText 7.pdf是AGPL/商業複雜 PDF 產生與操作

最佳實務建議

  1. 新專案優先考慮 Apache POI 處理 Excel(支援 .xlsx)
  2. 操作 Word 若無跨平台需求,Jacob 直觀易用;否則改用 POI 操作 .docx
  3. PDF 處理依授權需求在 iText 7 與 PDFBox 中擇一
  4. 大量資料處理時注意記憶體管理,及時關閉 Workbook 釋放資源
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved