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

VC6.0 透過 COM 自動化呼叫 Excel XP 與 Word 2000

     編輯:VC 教學

前言

在 Visual C++ 6.0 中整合 Microsoft Office 應用程式,最常見的方式是使用 COM 自動化。透過 #import 指令匯入型別程式庫,編譯器會產生智慧型指標包裝類別,讓我們能以物件導向的方式操控 Excel、Word 等應用程式。本文示範如何在 VC6.0 中分別啟動 Excel XP (Office 10) 與 Word 2000,並執行基本操作。

環境與標頭檔設定

首先定義是否使用 Office XP 版本的型別程式庫,並包含必要的標頭檔:

#include <ole2.h>
#include <stdio.h>
#pragma warning (disable:4146 4192 4786 4081)
#define USE_OfficeXP 1

匯入型別程式庫

根據 USE_OfficeXP 巨集,匯入對應版本的 DLL/OLB 檔案。注意路徑需依實際安裝位置調整,並使用 rename 避免命名衝突:

#ifdef USE_OfficeXP
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office10\\MSO.DLL"
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb"
#import "C:\\Program Files\\Microsoft Office\\Office10\\MSWord.olb" rename("ExitWindows", "ExitWindowsEx")
#import "C:\\Program Files\\Microsoft Office\\Office10\\Excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")
#else
#import "C:\\Program Files\\Microsoft Office\\Office\\MSO9.dll"
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" no_namespace
#import "C:\\Program Files\\Microsoft Office\\Office\\MSWord9.OLB" rename("ExitWindows", "_ExitWindows")
#import "C:\\Program Files\\Microsoft Office\\Office\\Excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")
#endif

初始化 COM 並建立 Excel 應用程式

主函式中初始化 COM 程式庫,取得 Excel 的 CLSID,建立應用程式實例並設為可見:

int main(int argc, char* argv[])
{
    VARIANT varItem;
    varItem.vt = VT_I4;
    varItem.intVal = 1;

    ::CoInitialize(NULL);
    CLSID clsid;

    // 啟動 Excel
    CLSIDFromProgID(L"Excel.Application", &clsid);
    Excel::_ApplicationPtr pApp;
    pApp.CreateInstance(clsid, NULL);
    pApp->PutVisible(0, VARIANT_TRUE);

    // 新增活頁簿與工作表
    Excel::_WorkbookPtr pWorkbook = pApp->GetWorkbooks()->Add();
    Excel::_WorksheetPtr pSheet = pWorkbook->GetWorksheets()->GetItem(varItem);
    Excel::RangePtr pRange = pSheet->GetUsedRange(0);

    // 讀取已使用的行列數
    int iColCnt = pRange->GetColumns()->GetCount();
    printf("used columns is %d ", iColCnt);
    int iRowCnt = pRange->GetRows()->GetCount();
    printf("used rows is %d ", iRowCnt);

    // 寫入儲存格並設定背景色
    pRange = pSheet->GetRange(OLESTR("A1"));
    pRange->Value2 = OLESTR("SOME");
    Excel::InteriorPtr pInterior = pRange->GetInterior();
    varItem.intVal = 0xff0000; // 紅色
    pInterior->PutColor(varItem);

    // 列印預覽
    pSheet->PrintPreview();

    ::CoUninitialize();
    return 0;
}

Word 自動化範例 (註解區塊)

程式碼中以 #if 0 封存的區塊展示 Word 自動化的基本流程:建立文件、插入文字。若需啟用,請將 #if 0 改為 #if 1,並將 Excel 區塊註解。

注意事項

  • 路徑中的反斜線需轉義為雙反斜線。
  • Office 版本不同,型別程式庫路徑與 ProgID 可能差異,請依實際環境調整。
  • 使用智慧型指標 (_Ptr) 可自動管理參考計數,減少記憶體洩漏風險。
  • 執行前請確認目標機器已安裝對應版本的 Office。

結語

透過 #import 与智慧型指標,VC6.0 開發者能輕鬆整合 Excel 與 Word 功能,實現報表產生、文件自動化等需求。掌握 COM 自動化基礎,可進一步擴展至 Outlook、PowerPoint 等 Office 元件。

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