Office 自動化(導出報表、郵件合併、PPT 生成)是企業級應用高頻需求。VB/C++/C# 原生支援 COM,Java 需橋接層。JCOM 是輕量級開源橋,支援 Excel/Word/PPT/Outlook 等全套 Office 組件。
jcom.dll(32/64 位對應 JDK 位數)。$JAVA_HOME/bin/ 或系統 PATH 目錄。JAVA_HOME 環境變量正確。import jp.ne.so_net.ga2.no_ji.jcom.excel8.*;
import jp.ne.so_net.ga2.no_ji.jcom.*;
public class ExcelDemo {
public static void main(String[] args) throws Exception {
ReleaseManager rm = new ReleaseManager(); // COM 釋放管理器
try {
System.out.println("啟動 Excel...");
ExcelApplication excel = new ExcelApplication(rm);
excel.Visible(true); // 顯示界面
ExcelWorkbooks books = excel.Workbooks();
ExcelWorkbook book = books.Add(); // 新建工作簿
ExcelWorksheets sheets = book.Worksheets();
ExcelWorksheet sheet = sheets.Item(1); // 第一張表
ExcelRange range = sheet.Cells();
range.Item(1, 1).Value("Hello, JCOM!"); // A1 儲存格寫入
System.out.println("寫入完成,請查看 Excel 窗口。");
} catch (Exception e) {
e.printStackTrace();
} finally {
rm.release(); // 關鍵:釋放所有 COM 引用,避免 Excel 殭屍進程
}
}
}
| Office 對象 | JCOM 類 | 關鍵屬性/方法 |
|---|---|---|
| Application | ExcelApplication | Workbooks(), Visible, Quit() |
| Workbook | ExcelWorkbook | Worksheets(), SaveAs(), Close() |
| Worksheet | ExcelWorksheet | Cells(), Range(), Name |
| Range | ExcelRange | Item(row, col), Value(), Formula() |
Object[][] data = new Object[100][5];
// 填充 data...
ExcelRange target = sheet.Range("A1", "E100");
target.Value(data); // 一次寫入 500 個儲存格
ExcelWorkbook book = books.Open("C:/reports/template.xls");
ExcelWorksheet sheet = book.Worksheets().Item("Sheet1");
sheet.Cells().Item(2, 3).Value("更新值");
book.SaveAs("C:/reports/output.xls");
book.Close(false);
ExcelChartObjects charts = sheet.ChartObjects();
ExcelChartObject chartObj = charts.Add(100, 50, 400, 300);
ExcelChart chart = chartObj.Chart();
chart.ChartType(ExcelChartType.xlColumnClustered);
chart.SetSourceData(sheet.Range("A1:B10"));
rm.release(),否則 Excel 進程常駐內存。excel8、excel9),根據目標 Office 版本選擇包。excel.Visible(false),但某些操作(如打印)需可見。