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

C++Builder 6 開發 Office 自動化實戰(一):架構選型、啟動退出與 Workbook/Worksheet 操作

     編輯:關於C++

核心觀點:堅持使用 Server 控件而非 OLE Automation

BCB6 提供的 TExcelApplication、TExcelWorkbook、TExcelWorksheet 等 Server 控件優勢:

  1. 結構化 OO 風格:EA->set_DisplayAlerts(0, false); EA->Quit(); 直觀優雅
  2. 編譯期強類型檢查:錯誤屬性名/參數編譯即報錯,不留隱患到運行期

OLE Automation 的 OleGetProperty/OleSetProperty 為弱類型,運行期才發現拼寫錯誤。

三大輔助查閱途徑(按推薦度排序)

  1. Excel 宏記錄器:操作 → 記錄宏 → 查看 VBA 代碼 → 映射到 BCB 方法(有效性 80%,簡易性 100%)
  2. Office VBA 幫助文檔:安裝後位於 C:\Program Files\Microsoft Office\OFFICE11\2052\VBAXL11.chm 等(有效性 85%,簡易性 80%)
  3. BCB6 Server 頭文件:C:\Program Files\Borland\CBuilder6\Include\Vcl\excel_2k.h(8MB+,有效性 100%,簡易性 10%)

三者結合驗證,如 Worksheets.Move 方法在三處定義完全一致。

ExcelApplication 啟動與退出

void __fastcall TMainForm::EABtnClick(TObject *Sender) {
    try { EA->Connect(); } catch(...) { ShowMessage("Can not launch server"); }
    EA->set_Caption(WideString("Excel Server Invoked by BCB"));
    EA->set_Visible(0, true);  // LocaleID=0
}

__fastcall TMainForm::~TMainForm() {
    EA->set_DisplayAlerts(0, false);  // 退出不彈確認框
    EA->Quit();
}

關鍵點:Visible 必須用 set_Visible(LocaleID, value),直接屬性訪問編譯報錯。ConnectKind 建議 ckRunningOrNew。

Workbook 創建與打開

// 新建
EWB->ConnectTo(EA->Workbooks->Add(TNP, 0));

// 打開現有文件(12 個可選參數多用 TNP)
EWB->ConnectTo(EA->Workbooks->Open(
    WideString("c:\\temp\\test.xls"),
    TNP, TNP, TNP, TNP, TNP, TNP, TNP, TNP, TNP, TNP, TNP, TNP, 0));

TNP = TNoParam() 宏,表示可選參數缺省。

Worksheet 操作:連接、重命名、移動、創建、刪除

// 連接三個默認工作表
EWS1->ConnectTo(EWB->Worksheets->get_Item(V("Sheet1")));
EWS2->ConnectTo(EWB->Worksheets->get_Item(V(2)));
EWS3->ConnectTo(EWB->Worksheets->get_Item(V("Sheet3")));
EWS3->Activate();

// 重命名
EWS1->set_Name(WideString(NewName));

// 移動 Sheet1 到 Sheet3 之後
EWS1->Move(TNP, V(EWB->Worksheets->get_Item(V("Sheet3"))), 0);

// 創建新工作表
EWS4->ConnectTo(EWB->Sheets->Add(TNP, V(EWB->Worksheets->get_Item(V("Sheet3"))), V(1), V(xlWorksheet)));

// 刪除
EWS2->Delete(0);

索引支持名稱("Sheet1")或序號(2)。V() = TVariant() 宏構造 Variant 參數。

常用宏定義

#define TNP TNoParam()
#define V TVariant

這兩個宏極大簡化了 COM 參數構造代碼。

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