Java 開發者長期面臨一大痛點:無法直接調用 Microsoft Office 的豐富 COM 自動化功能。JCom 作為 Java-to-COM 橋接框架,打破了這一壁壘,讓 Java 應用能像 VB、C++ 一樣暢控 Excel、Word、PowerPoint 等 Office 組件,甚至操作串口、調製解調器等底層硬體。本文通過實戰代碼示範如何用 JCom 實現「導出到 Excel」等高頻需求,並展示模板填充、公式計算等進階技巧。
從 SourceForge 下載 JCom,將編譯好的 DLL 放入 JAVA_HOME/bin,確保 JAVA_HOME 環境變量正確。核心依賴包含 jp.ne.so_net.ga2.no_ji.jcom.* 及 Excel 輔助類 jp.ne.so_net.ga2.no_ji.jcom.excel8.*。首個範例啟動 Excel、寫入「Hello, World!」到 A1 儲存格:
ReleaseManager rm = new ReleaseManager();
ExcelApplication excel = new ExcelApplication(rm);
excel.Visible(true);
ExcelWorkbook xlBook = excel.Workbooks().Add();
ExcelWorksheet xlSheet = xlBook.Worksheets().Item(1);
xlSheet.Cells().Item(1, 1).Value("Hello, World!");
rm.release(); // 釋放 COM 資源
場景:從 MySQL 查詢銷售數據,填充預製 Excel 模板,利用 Excel 內建公式自動計算毛銷售額、稅金、淨銷售額。
xlBooks.Open("c:\\sales.xls") 載入含公式的模板工作簿。xlSheet.Cells() 獲取整張工作表範圍。xlRange.Item(row, col).Value(...) 填充單元格。getExcelColumn(i) 將資料庫列號映射至 Excel 實際列(如第 8 列映射到第 13 列)。"=RC[-2]*RC[-1]" 表示「前兩列 × 前一列」,隨行自動遞增,無需在 Java 硬編碼業務邏輯。將公式預置於模板第 2 行,填充新數據前先複製該行:
if (nRow > 1) {
xlSheet.Range("A2:M2").Copy(xlSheet.Range("A" + (nRow + 1)));
}
此法確保公式隨行複製自動更新,業務邏輯變更只需調整模板,Java 代碼零修改。
JCom 並非僅限 Excel。對無專用輔助類的組件(如 Word),通用 IDispatch 即可操作:
IDispatch wdApp = new IDispatch(rm, "Word.Application");
wdApp.put("Visible", new Boolean(true));
// 後續調用 wdApp.method(...) 或 wdApp.put(...)
同理可控制 PowerPoint、Outlook 甚至硬體設備。JCom 讓 Java 開發者擁有與原生 Windows 開發者同等的 COM 呼叫能力,極大拓寬了 Java 在企業級自動化場景的應用邊界。