逐步解說:將內容控件系結至自定義 XML 元件
本逐步解說示範如何將 Word 之文件層級自訂中的內容控制項繫結至文件中所儲存的 XML 資料。
適用於: 本主題中的資訊適用於 Word 的檔案層級專案。 如需詳細資訊,請參閱 Office 應用程式 lication 和項目類型所提供的功能。
Word 可讓您將名為 自訂 XML 元件的 XML 資料儲存在檔案中。 將內容控制項繫結至自訂 XML 組件中的項目,即可控制這項資料的顯示。 本逐步解說中的範例文件會顯示自訂 XML 組件中所儲存的員工資訊。 開啟文件時,內容控制項會顯示 XML 項目的值。 您對內容控制項中文字進行的任何變更都會儲存在自訂 XML 組件中。
本逐步解說將說明下列工作:
在設計階段,將內容控制項新增至文件層級專案中的 Word 文件。
建立 XML 資料檔,以及定義項目以繫結至內容控制項的 XML 結構描述。
在設計階段,將 XML 結構描述附加至文件。
在運行時間將 XML 檔案的內容新增至檔中的自訂 XML 元件。
將內容控制項繫結至自訂 XML 組件中的項目。
將 DropDownListContentControl 繫結至 XML 結構描述中所定義的一組值。
注意
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 IDE 個人化。
必要條件
您需要下列元件才能完成這個逐步解說:
此版 Visual Studio 包含 Microsoft Office Developer Tools。 如需詳細資訊,請參閱 設定計算機來開發 Office 解決方案。
Microsoft Word
建立新的 Word 文件專案
建立將在逐步解說中使用的 Word 文件。
建立新的 Word 文件專案
建立名稱 為 EmployeeControls 的 Word 檔案專案。 建立方案的新文件。 如需詳細資訊,請參閱 如何:在Visual Studio中建立 Office專案。
Visual Studio 會在設計工具中開啟新的 Word 檔,並將 EmployeeControls 專案新增至 方案總管。
將內容控制項新增至檔
建立包含三種不同類型之內容控制項的資料表,使用者可以使用這些內容控制項來檢視或編輯員工相關資訊。
將內容控制項新增至文件
在 Visual Studio 設計工具中裝載的 Word 檔中,於功能區上,選擇 [插入 ] 索引標籤。
在 [數據表] 群組中,選擇 [數據表],然後插入含有 2 個數據行和 3 個數據列的數據表。
在第一個資料行中輸入文字,讓它類似下面資料行:
員工名稱 雇用日期 標題 在數據表的第二個數據行中,選擇第一個數據列 (員工名稱旁)。
在功能區上,選擇 [ 開發人員] 索引標籤 。
注意
如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 如何:在功能區上顯示開發人員索引標籤。
在 [ 控件] 群組中,選擇 [ 文字] 按鈕 ,將 新增至第一個 PlainTextContentControl 單元格。
在數據表的第二個數據行中,選擇第二個數據列 (在 [雇用日期] 旁)。
在 [ 控件] 群組中 ,選擇 [日期選擇器 ] 按鈕 ,將 新增至第二個 DatePickerContentControl 單元格。
在數據表的第二個數據行中,選擇第三個數據列 (標題旁)。
在 [ 控件 ] 群組中,選擇 [ 下拉式清單 ] 按鈕 ,將 新增至最後一個 DropDownListContentControl 單元格。
這是此專案的整個使用者介面。 如果您立即執行專案,則可以在第一個資料列中輸入文字,並在第二個資料列選取日期。 下一個步驟是將您想要顯示的資料附加至 XML 檔案中的文件。
建立 XML 資料檔
通常,您會從外部來源 (例如檔案或資料庫) 取得要儲存在自訂 XML 組件中的 XML 資料。 在本逐步解說中,您會建立包含員工資料的 XML 檔案,而員工資料會標上將繫結至文件中內容控制項的項目。 若要在運行時間提供數據,請將 XML 檔案內嵌為自訂元件中的資源。
建立資料檔
在 [ 專案 ] 功能表中,選擇 [ 加入新項目]。
[加入新項目] 對話方塊隨即出現。
在 [ 範本] 窗格中,選取 [ XML 檔案]。
將檔案命名為 employees.xml,然後選擇 [ 新增 ] 按鈕。
employees.xml 檔案會在程式代碼編輯器中開啟。
以下列文字取代 employees.xml 檔案的內容。
<?xml version="1.0" encoding="utf-8" ?> <employees xmlns="http://schemas.microsoft.com/vsto/samples"> <employee> <name>Karina Leal</name> <hireDate>1999-04-01</hireDate> <title>Manager</title> </employee> </employees>
在 方案總管 中,選擇 employees.xml 檔案。
在 [ 屬性] 視窗中,選取 [建置動作] 屬性,然後將值變更為 [內嵌資源]。
此步驟會在您建置專案時,將 XML 檔案內嵌為組件中的資源。 這可讓您在執行時間存取 XML 檔案的內容。
建立 XML 結構描述
如果您想要將內容控制項繫結至自訂 XML 組件中的單一項目,則不需要使用 XML 結構描述。 不過,若要將 DropDownListContentControl 繫結至一組值,您必須建立 XML 結構描述,以驗證您稍早建立的 XML 資料檔。 XML 結構描述定義 title
項目的可能值。 稍後,您將在本逐步解說中將 DropDownListContentControl 繫結至此項目。
建立 XML 結構描述
在 [ 專案 ] 功能表中,選擇 [ 加入新項目]。
[加入新項目] 對話方塊隨即出現。
在 [ 範本] 窗格中,選取 [ XML 架構]。
將架構 命名為 employees.xsd ,然後選擇 [ 新增 ] 按鈕。
結構描述設計工具隨即開啟。
在 方案總管 中,開啟 employees.xsd 的快捷方式功能表,然後選擇 [檢視程序代碼]。
以下列架構取代 employees.xsd 檔案的內容。
<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns="http://schemas.microsoft.com/vsto/samples" targetNamespace="http://schemas.microsoft.com/vsto/samples" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="employees" type="EmployeesType"></xs:element> <xs:complexType name="EmployeesType"> <xs:all> <xs:element name="employee" type="EmployeeType"/> </xs:all> </xs:complexType> <xs:complexType name="EmployeeType"> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/> <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:simpleType name="TitleType"> <xs:restriction base="xs:string"> <xs:enumeration value ="Engineer"/> <xs:enumeration value ="Designer"/> <xs:enumeration value ="Manager"/> </xs:restriction> </xs:simpleType> </xs:schema>
在 [ 檔案] 功能表上,按兩下 [ 全部 儲存],將您的變更儲存到 employees.xml 和 employees.xsd 檔案。
將 XML 架構附加至檔
您必須將 XML 結構描述附加至文件,以將 DropDownListContentControl 繫結至 title
項目的有效值。
將 XML 架構附加至檔案 (Word 2013 )
在設計工具中啟動 EmployeeControls.docx 。
在功能區上,選擇 [開發人員] 索引標籤,然後選擇 [載入宏] 按鈕。
在 [範本和載入宏] 對話方塊中,選擇 [XML 架構] 索引標籤,然後選擇 [新增架構] 按鈕。
流覽至 您稍早建立的 employees.xsd 架構,其位於您的項目目錄中,然後選擇 [ 開啟 ] 按鈕。
選擇 [架構 設定] 對話框中的 [確定] 按鈕。
選擇 [ 確定] 按鈕以關閉 [範本和載入宏] 對話方塊。
將 XML 結構描述附加至文件 (Word 2010)
在設計工具中啟動 EmployeeControls.docx 。
在功能區上,選擇 [ 開發人員] 索引標籤 。
在 XML 群組中,選擇 [架構] 按鈕。
在 [範本和載入宏] 對話方塊中,選擇 [XML 架構] 索引標籤,然後選擇 [新增架構] 按鈕。
流覽至 您稍早建立的 employees.xsd 架構,該架構位於您的項目目錄中,然後選擇 [ 開啟 ] 按鈕。
選擇 [架構 設定] 對話框中的 [確定] 按鈕。
選擇 [ 確定] 按鈕以關閉 [範本和載入宏] 對話方塊。
[XML 結構] 工作窗格隨即開啟。
關閉 [ XML 結構] 工作窗格。
將自訂 XML 元件新增至檔
您必須先將 XML 檔案的內容新增至文件中的新自訂 XML 組件,才能將內容控制項繫結至 XML 檔案中的項目。
將自訂 XML 組件新增至文件
在 方案總管 中,開啟 ThisDocument.cs 或 ThisDocument.vb 的快捷方式功能表,然後選擇 [檢視程式代碼]。
將下列宣告新增至
ThisDocument
類別: 此程式碼會宣告數個物件,以用來將自訂 XML 組件新增至文件。將下列方法新增至
ThisDocument
類別。 這個方法會取得內嵌為組件中資源的 XML 資料檔內容,並以 XML 字串形式傳回內容。private string GetXmlFromResource() { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream stream1 = asm.GetManifestResourceStream( "EmployeeControls.employees.xml"); using (System.IO.StreamReader resourceReader = new System.IO.StreamReader(stream1)) { if (resourceReader != null) { return resourceReader.ReadToEnd(); } } return null; }
將下列方法新增至
ThisDocument
類別。AddCustomXmlPart
方法會建立新的自訂 XML 組件,其中包含傳遞至此方法的 XML 字串。若要確保自訂 XML 組件只建立一次,只有在文件中還沒有具有相符 GUID 的自訂 XML 組件時,此方法才會建立自訂 XML 組件。 第一次呼叫此方法時,它會將 Id 屬性的值儲存至
employeeXMLPartID
字串。employeeXMLPartID
字串的值會保存在文件中,因為它是使用 CachedAttribute 屬性所宣告。private void AddCustomXmlPart(string xmlData) { if (xmlData != null) { employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID); if (employeeXMLPart == null) { employeeXMLPart = this.CustomXMLParts.Add(xmlData); employeeXMLPart.NamespaceManager.AddNamespace("ns", @"http://schemas.microsoft.com/vsto/samples"); employeeXMLPartID = employeeXMLPart.Id; } } }
將內容控制項系結至自訂 XML 元件中的專案
使用 每個內容控制件的 XMLMapping 屬性,將每個內容控制件系結至自訂 XML 元件中的專案。
將內容控制項繫結至自訂 XML 組件中的項目
將下列方法新增至
ThisDocument
類別。 此方法會將每個內容控制項繫結至自訂 XML 組件中的項目,並設定 DatePickerContentControl 的日期顯示格式。private void BindControlsToCustomXmlPart() { string xPathName = "ns:employees/ns:employee/ns:name"; this.plainTextContentControl1.XMLMapping.SetMapping(xPathName, prefix, employeeXMLPart); string xPathDate = "ns:employees/ns:employee/ns:hireDate"; this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"; this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate, prefix, employeeXMLPart); string xPathTitle = "ns:employees/ns:employee/ns:title"; this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, prefix, employeeXMLPart); }
開啟檔時執行程序代碼
建立自訂 XML 組件,並在開啟文件時,將自訂控制項繫結至資料。
在開啟文件時執行程式碼
將下面程式碼加新增至
ThisDocument
類別的ThisDocument_Startup
方法。 此程式代碼會從 employees.xml 檔案取得 XML 字串、將 XML 字串新增至檔中的新自定義 XML 元件,並將內容控件系結至自定義 XML 元件中的元素。
測試專案
開啟文件時,內容控制項會顯示自訂 XML 組件中項目的資料。 您可以按下 DropDownListContentControl 來選取元素的三個有效值之一,這些值title
定義於 employees.xsd 檔案中。 如果您編輯任何內容控制項中的資料,則新的值會儲存在文件的自訂 XML 組件中。
測試內容控制項
按 F5 執行專案。
請確認文件中的資料表類似於下表。 第二個資料行中的每個字串都會取自文件之自訂 XML 組件中的項目。
資料行 值 員工名稱 卡里娜·萊爾 雇用日期 1999 年 4 月 1 日 標題 經理 選擇 [員工名稱] 儲存格右邊的儲存格,然後輸入不同的名稱。
選擇 [僱用日期] 單元格右邊的單元格,然後在日期選擇器中選取不同的日期。
選擇 [標題] 單元格右邊的單元格,然後從下拉式清單中選取新專案。
儲存並關閉文件。
在 檔案總管 中,開啟專案位置下的 \bin\Debug 資料夾。
開啟 EmployeeControls.docx 的快捷方式功能表,然後選擇 [重新命名]。
將 EmployeeControls.docx.zip 檔案命名為 。
EmployeeControls.docx 檔會以 Open XML 格式儲存。 藉由以 .zip 擴展名重新命名此檔,您可以檢查文件的內容。 如需 Open XML 的詳細資訊,請參閱 Office (2007) Open XML 檔格式簡介技術文章。
開啟 EmployeeControls.docx.zip 檔案。
開啟 customXml 資料夾。
開啟 item2.xml 的快捷方式功能表,然後選擇 [開啟]。
此檔案包含您已新增至文件的自訂 XML 組件。
請確認
name
、hireDate
和title
項目包含您在文件中的內容控制項中輸入的新值。關閉item2.xml檔案。
下一步
您可以透過下列主題,進一步了解如何使用內容控制項:
使用所有可用的內容控制項來建立範本。 如需詳細資訊,請參閱 逐步解說:使用內容控件建立範本。
在關閉文件時,修改自訂 XML 組件中的資料。 下次使用者開啟文件時,繫結至 XML 項目的內容控制項會顯示新的資料。
使用內容控制項保護文件的組件。 如需詳細資訊,請參閱 如何:使用內容控件保護檔的元件。