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

利用 .NET 開發 Excel Interop 應用程式:從內而外的增益集模式

     編輯:關於.NET

過去我曾介紹過在 BDS 2006 環境下,以「由外而內」方式開發 Interop 程式的常規步驟:啟動 Excel 應用程式物件,取得 Workbook、Worksheet、Cells 等介面參考並進行操作。今天要分享一種全新的開發模式——「由內而外」:讓 Excel 工作簿主動載入並呼叫我們開發的 .NET 組件,實現更緊密的整合體驗。

一、開發工具與前置準備

本範例使用免費的 C# IDE SharpDevelop(可自官網免費下載),作業系統為 Vista Business(XP 同樣適用),Office 版本為 2003。安裝 Office 時務必勾選各應用程式(Word、Excel 等)的 .NET 程式設計支援(PIA),否則無法參考 Interop 組件。

二、建立 Excel 增益集專案

  1. 啟動 SharpDevelop,選擇 File → New → Solution,從 C# 範本中選取 Class Library,設定專案路徑與名稱後按 Create。
  2. 在 Solution Explorer 的 References 節點右鍵選擇 Add Reference,從 GAC 中加入 Microsoft.Office.Interop.Excel(注意:必須使用 GAC 版本,而非 COM 索引標籤)。
  3. 修改自動產生的 MyClass.cs,加入必要的命名空間與組件屬性:
using System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;

[assembly: System.ComponentModel.DescriptionAttribute(
    "OfficeStartupClass, Version=1.0, Class=TestOLE.MyClass")]

Class=TestOLE.MyClass 需對應專案的命名空間與類別名稱。

  1. 在 MyClass 中實作 Excel 要求的兩個特定方法 _Startup 與 _Shutdown:
public Excel.Application MyApp;
public Excel.Workbook MyWorkBook;
public Excel.Worksheet MyWorksheet;

public void _Startup(object thisApp, object thisWorkbook)
{
    this.MyApp = thisApp as Excel.Application;
    this.MyWorkBook = thisWorkbook as Excel.Workbook;
    this.MyWorksheet = MyWorkBook.Worksheets[1] as Excel.Worksheet;
    MyWorksheet.Cells[1, 1] = "The add-on starts!";
}

public void _Shutdown()
{
    MyApp = null;
    MyWorkBook = null;
    MyWorksheet = null;
}

編譯專案即可產生 MyClass.dll。

三、安全性設定(.NET 1.x 原則)

雖然開發環境為 .NET 2.0/3.0,但產出的 DLL 安全性必須在 .NET 1.x 的原則下配置(如 caspol.exe 設定信任),詳細步驟請參考相關文件。

四、將增益集與 Excel 工作簿關聯

  1. 開啟(或建立)一個 Excel 工作簿,選擇 檔案 → 內容 → 自訂 索引標籤。
  2. 新增兩個自訂屬性:
  • _AssemblyLocation0:DLL 所在完整路徑(例如 D:\Go4Pro Programs\00017\bin\Debug)。
  • _AssemblyName0:組件名稱(不含副檔名,例如 TestOLE)。

儲存並重新開啟工作簿,若 A1 顯示 The add-on starts! 即代表增益集已成功載入並執行。

五、實作互動:透過超連結觸發 C# 方法

為了讓使用者能在工作簿中直接操控行為,我們利用 SheetFollowHyperlink 事件配合超連結來呼叫增益集方法。

  1. 在 MyClass 中新增事件處理與業務邏輯:
private Excel.WorkbookEvents_SheetFollowHyperlinkEventHandler followHyperlinksEvent;

public void _Startup(object thisApp, object thisWorkbook)
{
    // ... 前略 ...
    followHyperlinksEvent = new Excel.WorkbookEvents_SheetFollowHyperlinkEventHandler(
        ThisWorkbook_SheetFollowHyperlink);
    MyWorkBook.SheetFollowHyperlink += followHyperlinksEvent;
}

protected void ThisWorkbook_SheetFollowHyperlink(System.Object s, Excel.Hyperlink l)
{
    switch (l.SubAddress)
    {
        case "ChangeTitle":
            ChangeTitle();
            break;
        default:
            break;
    }
}

public void ChangeTitle()
{
    MyApp.Caption = "Invoked from Excel (supported by C#)";
}
  1. 在 Excel 工作簿中:
  • 任意儲存格輸入文字(如 Click here to change the title!)。
  • 將該儲存格命名為 ChangeTitle(須與 case 字串完全一致)。
  • 選取該儲存格,插入超連結 → 本文件中的位置 → 定義的名稱 → 選擇 ChangeTitle。

儲存並重新開啟,點擊該儲存格即可看到 Excel 視窗標題被 C# 程式碼修改。

六、與傳統模式比較

面向傳統「由外而內」增益集「由內而外」
操作介面需在自訂程式與 Excel 之間切換完全在 Excel 介面內操作
生命週期需手動關閉主程式關閉工作簿即自動卸載 DLL
部署門檻較低需設定 .NET 1.x 安全性,較高

孰優孰劣,端視專案需求與使用者技術能力而定。

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