本逐步解說示範如何將 Word 文件層級自訂中的內容控制項系結至儲存在文件中的 XML 資料。
適用於: 本主題中的資訊適用於 Word 的文件層級專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能。
Word 可讓您將 XML 資料 (稱為 自訂 XML 零件) 儲存在文件中。 您可以將內容控制項繫結至自訂 XML 零件中的元素,以控制此資料的顯示。 本逐步解說中的範例文件會顯示儲存在自訂 XML 組件中的員工資訊。 當您開啟文件時,內容控制項會顯示 XML 元素的值。 您對內容控制項中的文字所做的任何變更都會儲存在自訂 XML 零件中。
本逐步解說將說明下列工作:
在設計階段將內容控制項新增至文件層級專案中的 Word 文件。
建立 XML 資料檔案和 XML 結構描述,以定義要繫結至內容控制項的元素。
在設計階段將 XML 結構描述附加至文件。
在執行階段,將 XML 檔案的內容新增至文件中的自訂 XML 部件。
將內容控制項繫結至自訂 XML 部件中的元素。
將 DropDownListContentControl 繫結至 XML 模式中定義的一組值。
備註
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 個人化 IDE。
先決條件
您需要下列組件才能完成本步驟解說:
包含 Microsoft Office 開發人員工具的 Visual Studio 版本。 如需詳細資訊,請參閱 設定電腦以開發 Office 解決方案。
Microsoft Word。
建立新的 Word 文件專案
建立您將在逐步解說中使用的 Word 文件。
建立新的 Word 文件專案
建立名稱為 EmployeeControls 的 Word 文件專案。 為解決方案建立新文件。 如需詳細資訊,請參閱 如何:在 Visual Studio 中建立 Office 專案。
Visual Studio 會在設計工具中開啟新的 Word 檔,並將 EmployeeControls 專案新增至 [方案總管]。
將內容控制項新增至文件
建立包含三種不同類型內容控制項的資料表,使用者可以在其中檢視或編輯員工的相關資訊。
將內容控制項新增至文件
在裝載於 Visual Studio 設計工具的 Word 文件中,在功能區上,選擇 [插入] 索引標籤。
在 [資料表 ] 群組中,選擇 [資料表],然後插入具有 2 欄和 3 列的資料表。
在第一欄中鍵入文字,使其類似於下列欄:
員工姓名 僱用日期 標題 在表格的第二欄中,選擇第一列 ( 在 [員工姓名] 旁邊)。
在功能區上,選擇 [開發人員] 索引標籤。
備註
如果「 開發人員」 標籤不可見,您必須先顯示它。 如需詳細資訊,請參閱 如何:在功能區上顯示開發人員索引標籤。
在 [控制項] 群組中,選擇[文字]按鈕
,以在PlainTextContentControl第一個儲存格中新增一個PlainTextContentControl。在表格的第二欄中,選擇第二列 (在 [僱用日期] 旁邊)。
在 [控制項] 群組中,選擇 [日期選擇器] 按鈕
],將 a 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 群組中,選擇 Schema ( 結構描述 ) 按鈕。
在 [範本和增益集 ] 對話方塊中,選擇 [ 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、 和hireDatetitle元素包含您在文件中內容控制項中輸入的新值。關閉 item2.xml 檔案。
後續步驟
您可以從下列主題進一步瞭解如何使用內容控制項:
使用所有可用的內容控制項來建立範本。 如需詳細資訊,請參閱 逐步解說:使用內容控制項建立範本。
在關閉文件時修改自訂 XML 組件中的資料。 下次使用者開啟文件時,繫結至 XML 元素的內容控制項將顯示新資料。
使用內容控制項來保護文件的各個部分。 如需詳細資訊,請參閱 如何:使用內容控制項保護文件的部分。