當您使用文件層級自訂來擴充 Microsoft Office Word 或 Microsoft Office Excel 時,您可以執行下列工作:
使用其物件模型將應用程式自動化。
將控制項新增至文件表面。
從自訂元件呼叫文件中的 Visual Basic for Applications (VBA) 程式碼。
從 VBA 呼叫自訂元件中的程式碼。
當文件位於未安裝 Microsoft Office 的伺服器上時,管理文件的某些層面。
自訂應用程式的使用者介面 (UI)。
適用於: 本主題中的資訊適用於 Excel 和 Word 的文件層級專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能。
在文件層級專案中撰寫程式碼的某些層面與 Visual Studio 中其他類型的專案不同。 其中許多差異是由 Office 物件模型公開給 Managed 程式碼的方式所造成。 如需詳細資訊,請參閱 在 Office 解決方案中撰寫程式碼。
如需文件層級自訂和您可以使用 Visual Studio 中的 Office 開發工具建立的其他類型解決方案的一般資訊,請參閱 Office 解決方案開發概觀 (VSTO)。
在文件層級專案中使用產生的類別
當您建立文件層級專案時,Visual Studio 會自動在專案中產生類別,您可以使用該類別來開始撰寫程式碼。 Visual Studio 會針對 Word 和 Excel 產生不同的類別:
在 Word 的文件層級專案中,預設會呼叫
ThisDocument類別。Excel 的文件層級專案有多個產生的類別:一個用於活頁簿本身,一個用於每個工作表。 依預設,這些類別具有下列名稱:
ThisWorkbookSheet1Sheet2Sheet3
產生的類別包括開啟或關閉文件時呼叫的事件處理常式。 若要在開啟文件時執行程式碼,請將程式碼新增至
Startup事件處理常式。 若要在文件關閉之前執行程式碼,請將程式碼新增至Shutdown事件處理常式。 如需詳細資訊,請參閱 Office 專案中的事件。
了解產生類別的設計
在以 .NET Framework 4 或 .NET Framework 4.5 為目標的專案中,Visual Studio Tools for Office 執行階段中的主機專案類型是介面,因此產生的類別無法從中衍生其實作。 相反地,產生的類別會從下列基底類別衍生其大部分成員:
ThisDocument:源自 DocumentBase。ThisWorkbook:源自 WorkbookBase。Sheetn:源自 WorksheetBase。這些基類會將對其成員的所有呼叫重新導向至 Visual Studio Tools for Office 執行階段中對應主機專案介面的內部實作。 例如,如果您呼叫 Protect 類別的方法
ThisDocument,那麼 DocumentBase 類別會在 Visual Studio Tools for Office 執行階段中,將這個呼叫重新導向至 Document 介面的內部實作。
存取主機應用程式的物件模型
若要存取主機應用程式的物件模型,請在專案中使用所產生類別的成員。 這些類別中的每一個都對應於 Excel 或 Word 物件模型中的一個物件,而且它們包含大部分相同的屬性、方法和事件。 例如, ThisDocument Word 文件層級專案中的類別提供與 Word 物件模型中物件 Document 相同的大部分成員。
下列程式碼範例示範如何使用 Word 物件模型來儲存屬於 Word 文件層級自訂一部分的文件。 此範例旨在從ThisDocument 類別中執行。
若要在 ThisDocument 類別外執行相同操作,請使用 Globals 物件來存取 ThisDocument 類別。 例如,如果您想要在動作窗格 UI 中包含 [儲存] 按鈕,您可以將此程式碼新增至動作窗格程式碼檔案。
因為ThisDocument類別從Document主機專案取得大部分的成員,所以在此程式碼中呼叫的Save方法實際上是Document主機專案的Save方法。 這個方法對應 Word 物件模型中 Document 物件的方法 Save。
如需使用 Word 和 Excel 物件模型的詳細資訊,請參閱 Word 物件模型概觀 和 Excel 物件模型概觀。
如需物件的詳細資訊 Globals ,請參閱 Office 專案中物件的全域存取。
將控制項新增至文件
若要自訂文件的 UI,您可以將 Windows Forms 控制項或 主機控制項 新增至文件介面。 透過結合不同的控制項集並撰寫程式碼,您可以將控制項繫結至資料、從使用者收集資訊,以及回應使用者動作。
主機控制項是擴充 Word 和 Excel 物件模型中某些物件的類別。 例如,ListObject 主機控制項提供與 ListObject 在 Excel 中的所有功能。 不過, ListObject 主機控制項也有其他事件和資料繫結功能。
如需詳細資訊,請參閱 主機項目和主機控制項概觀 和 Office 文件上的 Windows 表單控制項概觀。
結合 VBA 和文件層級自訂
您可以在屬於文件層級自訂一部分的文件中使用 VBA 程式碼。 您可以從自定義元件呼叫文件中的 VBA 程式碼,也可以設定專案,讓文件中的 VBA 程式碼呼叫自訂元件中的程式碼。
如需詳細資訊,請參閱結合 VBA 和文件層級自訂。
管理伺服器上的文件
您可以在未安裝 Microsoft Office Word 或 Microsoft Office Excel 的伺服器上管理文件層級自訂的數個不同層面。 例如,您可以存取和修改文件資料快取中的資料。 您也可以管理與文件相關聯的自訂組件。 例如,您可以以程式設計方式從文件中移除元件,讓文件不再執行您的程式碼,或者您可以以程式設計方式將元件附加至文件。
如需相關資訊,請參閱 使用 ServerDocument 類別管理伺服器上的文件。
自訂 Microsoft Office 應用程式的使用者介面
您可以使用文件層級自訂,以下列方式自訂 Word 和 Excel 的 UI:
將主機控制項或 Windows Forms 控制項新增至文件介面。
如需詳細資訊,請參閱 使用擴充物件將 Word 自動化、使用 擴充物件將 Excel 自動化,以及 Office 文件上的 Windows Forms 控制項概觀。
將動作窗格新增至文件。
如需詳細資訊,請參閱 動作窗格概觀。
將自訂的索引標籤新增到功能區。
如需詳細資訊,請參閱 功能區概觀。
將自訂群組新增至功能區上的內建索引標籤。
如需詳細資訊,請參閱 如何:自訂內建索引標籤。
如需自訂 Microsoft Office 應用程式 UI 的詳細資訊,請參閱 Office UI 自訂。
在文件層級自訂功能中,從原生 Office 物件取得擴充物件
許多 Office 事件的事件處理器會接收一個原生的 Office 物件,此物件可代表引發事件的活頁簿、工作表或文件。 在某些情況下,您可能只想在文件層級自訂中的活頁簿或文件引發事件時執行某些程式碼。 例如,在 Excel 的文件層級自訂中,您可能想要在使用者啟用自訂活頁簿中的其中一個工作表時執行一些程式碼,但當使用者在其他活頁簿中啟用同時開啟的工作表時,則不需要執行一些程式碼。
當您有原生 Office 物件時,您可以測試該物件是否已延伸至文件層級自訂中的 主機項目 或 主機控制項 。 主機專案和主機控制項是 Visual Studio Tools for Office 執行階段所提供的類型,可將功能新增至 Word 或 Excel 物件模型中原生存在的物件 (稱為 原生 Office 物件) 。 主機項目和主機控制項統稱為 擴充物件。 如需主機項目和主機控制項的詳細資訊,請參閱 主機項目和主機控制項概觀。
瞭解 GetVstoObject 和 HasVstoObject 方法
若要測試原生 Office 物件,請在專案中使用 HasVstoObject 和 GetVstoObject 方法。
如果您想要判斷原生 Office 物件在自訂中是否有擴充物件,請使用該
HasVstoObject方法。 如果原生 Office 物件具有擴充物件,則這個方法會傳回 true ,否則會傳回 false 。如果您想要取得原生 Office 物件的擴充物件,請使用該
GetVstoObject方法。 如果指定的原生 Office 物件具有物件,則此方法會傳回 ListObject、 Workbook、 Worksheet或 Document 物件。 否則,GetVstoObject傳回 null。 例如,如果指定的GetVstoObject是 Word 文件專案中文件的基礎物件,則方法Document會傳回 aDocument。在文件層級專案中,您無法使用該
GetVstoObject方法在執行時期建立新的 Workbook、 Worksheet或 Document 主項目。 您只能使用此方法來存取在設計階段在專案中產生的現有主機項目。 如果您想要在執行時間建立新的主機項目,則必須開發 VSTO 外掛程式專案。 如需詳細資訊,請參閱 主機項目和主機控制項的程式設計限制 ,以及在 執行階段在 VSTO 增益集中擴充 Word 文件和 Excel 活頁簿。
使用 GetVstoObject 和 HasVstoObject 方法
若要呼叫 HasVstoObject 方法及 GetVstoObject 方法,請使用 Globals.Factory.GetVstoObject 或 Globals.Factory.HasVstoObject 方法,並傳入您要測試的原生 Word 或 Excel 物件(例如 Document 或 Worksheet)。