C++Builder 操作 Excel 主流有兩條路徑:OLE 自動化 (需安裝 Excel,功能全、效能較低) 與 ODBC (無需 Excel,視為資料庫,唯讀/寫入受限、效能高)。
C++Builder 不支援 VB/Delphi 的語法糖,需透過 Variant 四大方法:
OlePropertyGet (取屬性) → 宏 PGOlePropertySet (設屬性) → 宏 PSOleFunction (呼叫函式) → 宏 FNOleProcedure (呼叫程序) → 宏 PR引用 #include 。
// VB: Ex.ActiveWorkBook.ActiveSheet.Cells(1,2).Value = 3
// C++Builder:
Variant Ex, Wb, Sh1;
Ex = Variant::CreateObject("Excel.Application");
Ex.PG("WorkBooks").PR("Open", "c:\\book1.xls");
Wb = Ex.PG("ActiveWorkBook");
Sh1 = Wb.PG("ActiveSheet");
Edit1->Text = Sh1.PG("Cells", 1, 1).PG("Value");
for (int i=1; i<=10; i++)
for (int j=1; j<=10; j++)
Sh1.PG("Cells", i, j).PS("Value", i*100+j);
Wb.PR("Save"); Wb.PR("Close"); Ex.PR("Quit");
ABC) 或「插入→名稱→定義」。Microsoft Excel Driver (*.xls) → 設定資料源名 (如 excel01)、版本、取消「唯讀」、選定工作簿路徑。TDatabase:AliasName=excel01, Name=excel02, 取消 Login prompt。TTable:DatabaseName=excel02, TableName=ABC (命名範圍名)。TDataSource 連接 Table → TDBGrid/TDBNavigator 顯示。Table1->Active = false,否則編譯/執行會報錯 (Excel 被 ODBC 獨佔開啟)。| 需求 | 推薦方案 |
|---|---|
| 需操作儲存格格式、公式、圖表、VBA、列印 | OLE 自動化 |
| 大量資料讀寫、無 Excel 環境、類 SQL 查詢、高效能 | ODBC |
| 跨平台、無 Office 授權 | ODBC 或第三方庫 (libxl, ExcelFormatLib 等) |
兩種方案在 Win2000/XP/Win7/Win10、Office 97~2019、C++Builder 4~11 環境均驗證可行。