共用方式為


在 Excel 中使用 C API 進行程式設計

適用於:Excel 2013 |Office 2013 |Visual Studio

您可以使用 Microsoft Excel 2013 XLL 軟體開發工具包和 C API 來建立適用於 Excel 2013 的高效能工作表函式。 升級至 Excel 2013 C API,反映出對第三方或內部功能效能至關重要之使用者的持續支援。

Excel 程式設計介面

Excel 提供數個選項來開發與其介面的應用程式。 Excel 程式設計介面已以下列順序新增至舊版:

  • XLM 巨集語言: Excel 擴充功能的第一個使用者可存取語言,以及 C API 的基礎。 雖然 Excel 2010 仍然支援 XLM,但 Visual Basic for Applications (VBA) 已取代 XLM。

  • C API 和 XLL: 與 Excel 整合的 DLL。 這些 DLL 提供最直接且最快速的介面來新增高效能工作表函式,但相較於較較新技術,其成本為一些複雜性。

  • VBA: 與 Excel 活頁簿對象相關聯的 Visual Basic 程式代碼物件。 VBA 允許事件捕捉、自定義,以及新增用戶定義函式和命令。 VBA 是最常用且最容易使用的擴充性選項。

  • COM: Windows 應用程式的互作性標準,Excel 會透過此標準公開其事件和物件。 VBA 使用 COM 與 Excel 互動。 Excel 會匯出 COM 類型連結庫,以協助您建立C++可在外部控制 Excel 的 COM 程式代碼資源和應用程式。

  • Microsoft .NET Framework:專為分散式環境快速開發應用程式而設計的多語言 Managed 程式代碼環境。 以 .NET Framework 為基礎的程式代碼主要程序設計語言是 C#,雖然許多語言都可以編譯為 MSIL) Microsoft中繼語言 (。 Excel 2013 可以存取包含在 .NET Framework元件中的程式代碼資源。

使用 C API 的時機

撰寫 XLL 和使用 C API 的主要原因是建立高效能工作表函式。 雖然 XLL 函式通常稱為使用者定義函數,但投入時間來取得撰寫 XLL 所需的瞭解和技能,讓大多數用戶無法使用這項技術。 不過,高效能函式的應用—以及在 Excel 2013 中,能夠將多線程介面寫入功能強大的伺服器資源—讓這成為 Excel 擴充性中非常重要的一部分。

Excel 2007 中引進的 C API 修訂主要涉及與高效能計算相關的層面,而不是使用者介面等功能。

撰寫 High-Performance User-Defined 工作表函式

當您想要藉由建立 XLL 載入巨集來建立高效能工作表函式時,Excel C API 是理想的選擇。C API 可讓您最直接地存取工作表數據。 XLL 可讓 Excel 最直接地存取 DLL 資源。 在 Excel 2013 中,XLL 的效能會進一步增強,方法是新增新的資料類型,最重要的是支援在叢集伺服器上執行使用者定義函式。

使用 XLL 需要付費:C API 沒有 VBA、COM 或 .NET Framework 的較高層級快速開發功能。 記憶體管理層級較低,因此對開發人員負有更大的責任。 透過 COM 公開的許多 Excel 功能,可透過 VBA 和 .NET Framework 提供,不會公開給 C API。

使用 XLL 工作表函式存取多線程伺服器

在 Excel 2007 中引進的多線程重新計算 (MTR) ,可讓您建立安全線程的 XLL 工作表函式。 您可以使用這些函式來存取多線程伺服器。 稍後的章節將更完整地說明這如何大幅提升用戶觀察到的效能。 對於有時需要存取大量處理能力的 Excel 使用者,使用 MTR 和功能強大的計算伺服器的 XLL 組合可提供最高效能的解決方案。

自訂 Excel 使用者介面

對於許多版本的 Excel,C API 不是自定義使用者介面的最佳選擇。 VBA 具有 Excel 物件和事件的更佳存取權。 Excel 2007 中引進的使用者介面與舊版的外觀和基礎技術有顯著的差異。 您可以使用 Managed 程式代碼資源,以最佳方式自定義此介面。

建立可在因特網上存取的應用程式

Excel Services 於 2007 Microsoft Office 系統中引進,可讓使用者使用標準網頁瀏覽器工具來存取活頁簿和 Excel 功能。 這些技術與 .NET Framework 開發語言和資源搭配使用,是未來向使用者部署 Excel 的重要部分。

從外部應用程式控制Excel

Excel 會透過 COM 介面公開其物件、方法和事件。 因此,您可以使用 COM 來建立可啟動和控制 Excel 工作階段或控制現有 Excel 會話的獨立應用程式。 您可以在數種開發語言中存取 COM 公開的 Excel 介面,包括C++和 VBA。 C# 和 .NET Framework 同樣地提供介面給 Excel,讓您能夠遠端訪問及控制 Excel。

異步呼叫 Excel

只有在 Excel 將控制項傳遞至 XLL 時,Excel 才允許 XLL 呼叫 C API。 Excel 呼叫的工作表函式可以使用 C API 回呼 Excel。 Excel 呼叫的 XLL 命令可以呼叫 C API。 當 Excel 本身呼叫 VBA 時,VBA 所呼叫的 DLL 和 XLL 函式和命令可以呼叫 C API。 例如,您無法將定時 Windows 回呼設定為 XLL,並從中呼叫 C API,而且您無法從 XLL 所建立的背景線程呼叫 C API。 不建議從 DLL 或 XLL 使用 COM 以異步方式呼叫 Excel。

這非常有限,因為可能有您希望 Excel 以異步方式回應事件的應用程式。 例如,您可能想要 Excel 擷取因特網上的數據片段,並在該資料變更時重新計算。 或者,您可能想要背景線程執行計算,並在 Excel 完成時重新計算。

若要這麼做,您可以讓 Excel 主動輪詢變更,但這沒有效率且有限制,因為它牽涉到 Excel 經常中斷其一般活動。 您可以使用 C API 或 VBA 來設定重複的定時命令,雖然這不是理想的解決方案。

在理想情況下,您會想要更有效率的外部程式來檢查數據變更,並讓該外部進程觸發 Excel 以擷取更新並執行重新計算。 您可以使用介面至 Excel 的應用程式,使用 COM 來執行這項作。 COM 的限制方式與 C API 不同,只能在 Excel 明確傳遞它控件時進行呼叫。 COM 應用程式可以在 Excel 處於就緒狀態時叫用 Excel 方法,不過,如果顯示對話框、將功能表向下提取,或巨集正在執行時,可能會忽略這些方法呼叫。

C API 及其與 XLM 的關係

Excel 巨集 (XLM) 語言是 Excel 中提供的第一個使用者可存取程式設計環境。 它可讓用戶在看起來像一般工作表的特殊巨集表上建立自定義命令和函式。 Excel 2013 仍支援 XLM 巨集表。 除了無法在工作表上輸入的下列專案之外,您還可以在巨集工作表上使用所有一般工作表函數,例如 SUMLOG

  • 工作區資訊函式,例如 GET。CELLGET。活頁簿

  • 命令對等函式,可讓一般使用者作業自動化 ,例如 DEFINE.NAMEPASTE

  • REGISTER 等載入巨集相關的函式。

  • 命令對等事件陷阱,例如 ON。ENRTYON。TIME

  • 巨集函數特定的作業,例如 ARGUMENTVOLATILE

  • 流程控制作業,例如 GOTORETURN

Excel 第 3 版中存在 C API 的有限版本。 不過,在 Excel 第 4 版中,XLM 語言已對應至 C API。 之後,DLL 就能夠呼叫所有工作表函式、巨集工作表資訊函式和命令,以及設定事件陷阱。 DLL 無法從 C API 內呼叫 XLM 流量控制函式。 這些巨集工作表函數和命令記載於說明檔 XLMacr8.hlp (先前命名為 Macrofun.hlp) 。 若要取得此說明檔,請移至 Microsoft下載中心 並搜尋 「XLMacr8.hlp」。。

注意事項

Windows Vista 和 Windows 7 不直接支援 .hlp 檔案,但您可以從可開啟這些檔案的 Microsoft下載適用於 Windows Vista 的 Windows 說明計劃 (WinHlp32.exe) 或適用於 Windows 7 的 Windows 說明計劃 (WinHlp32.exe) 。

DLL 會使用回呼函式 Excel4、Excel4vExcel12 和 Excel12v呼叫這些函式和命令的 C API 對等專案 (最後兩個函式是在 Excel 2007) 中引進的。 對應至每個函式和命令的列舉常數會定義在頭檔中,並傳遞為這些回呼的其中一個自變數。 例如,GET。CELL 是由 xlfGetCell、REGISTER by xlfRegisterxlcDefineNameDEFINE.NAME 來表示。

除了提供工作表函式和巨集工作表函式和命令之外,C API 還提供只能透過在 DLL 內使用這些回呼來呼叫的函式和命令列舉。 例如, xlGetName 可讓 DLL 找出自己的完整路徑和檔名,當您向 Excel 註冊函式和命令時,這是必要的。

由於在 Excel 第 5 版中引進 Visual Basic for Applications (VBA) 工作表,而 Visual Basic 編輯器 (VBE) 版本 8 (Excel 97) ,使用者自定義 Excel 的最簡單方式是使用 VBA 而非 XLM。 因此,新版 Excel 中引進的大部分新功能都可透過 VBA 使用,但無法透過 XLM 或 C API 取得。 例如,有數個命令、事件陷阱和增強的對話框功能可透過 VBA使用,但無法透過 XLM 或 C API 來使用。

如需詳細資訊,請 參閱適用於 Excel 的 C API 的新功能。

另請參閱

適用於 Excel 的 C API 的新功能

C API 回呼函式 Excel4、Excel12

使用 Excel XLL SDK 使用者入門