逐步解說:將內容控件系結至自定義 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 個人化

必要條件

您需要下列元件才能完成這個逐步解說:

建立新的 Word 文件專案

建立將在逐步解說中使用的 Word 文件。

建立新的 Word 文件專案

  1. 建立名稱 為 EmployeeControls 的 Word 檔案專案。 建立方案的新文件。 如需詳細資訊,請參閱 如何:在Visual Studio中建立 Office專案。

    Visual Studio 會在設計工具中開啟新的 Word 檔,並將 EmployeeControls 專案新增方案總管

將內容控制項新增至檔

建立包含三種不同類型之內容控制項的資料表,使用者可以使用這些內容控制項來檢視或編輯員工相關資訊。

將內容控制項新增至文件

  1. 在 Visual Studio 設計工具中裝載的 Word 檔中,於功能區上,選擇 [插入 ] 索引標籤。

  2. 在 [數據表] 群組中,選擇 [數據表],然後插入含有 2 個數據行和 3 個數據列的數據表。

  3. 在第一個資料行中輸入文字,讓它類似下面資料行:

    員工名稱
    雇用日期
    標題
  4. 在數據表的第二個數據行中,選擇第一個數據列 (員工名稱)。

  5. 在功能區上,選擇 [ 開發人員] 索引標籤

    注意

    如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 如何:在功能區上顯示開發人員索引標籤。

  6. 在 [ 控件] 群組中,選擇 [ 文字] 按鈕 PlainTextContentControl ,將 新增至第一個 PlainTextContentControl 單元格。

  7. 在數據表的第二個數據行中,選擇第二個數據列 (在 [雇用日期] 旁)。

  8. 在 [ 控件] 群組中 ,選擇 [日期選擇器 ] 按鈕 DatePickerContentControl ,將 新增至第二個 DatePickerContentControl 單元格。

  9. 在數據表的第二個數據行中,選擇第三個數據列 (標題)。

  10. 在 [ 控件 ] 群組中,選擇 [ 下拉式清單 ] 按鈕 DropDownListContentControl ,將 新增至最後一個 DropDownListContentControl 單元格。

    這是此專案的整個使用者介面。 如果您立即執行專案,則可以在第一個資料列中輸入文字,並在第二個資料列選取日期。 下一個步驟是將您想要顯示的資料附加至 XML 檔案中的文件。

建立 XML 資料檔

通常,您會從外部來源 (例如檔案或資料庫) 取得要儲存在自訂 XML 組件中的 XML 資料。 在本逐步解說中,您會建立包含員工資料的 XML 檔案,而員工資料會標上將繫結至文件中內容控制項的項目。 若要在運行時間提供數據,請將 XML 檔案內嵌為自訂元件中的資源。

建立資料檔

  1. 在 [ 專案 ] 功能表中,選擇 [ 加入新項目]。

    [加入新項目] 對話方塊隨即出現。

  2. 在 [ 範本] 窗格中,選取 [ XML 檔案]。

  3. 將檔案命名為 employees.xml,然後選擇 [ 新增 ] 按鈕。

    employees.xml 檔案會在程式代碼編輯器中開啟。

  4. 以下列文字取代 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>
    
  5. 方案總管,選擇 employees.xml 檔案。

  6. 在 [ 屬性] 視窗中,選取 [建置動作] 屬性,然後將值變更為 [內嵌資源]。

    此步驟會在您建置專案時,將 XML 檔案內嵌為組件中的資源。 這可讓您在執行時間存取 XML 檔案的內容。

建立 XML 結構描述

如果您想要將內容控制項繫結至自訂 XML 組件中的單一項目,則不需要使用 XML 結構描述。 不過,若要將 DropDownListContentControl 繫結至一組值,您必須建立 XML 結構描述,以驗證您稍早建立的 XML 資料檔。 XML 結構描述定義 title 項目的可能值。 稍後,您將在本逐步解說中將 DropDownListContentControl 繫結至此項目。

建立 XML 結構描述

  1. 在 [ 專案 ] 功能表中,選擇 [ 加入新項目]。

    [加入新項目] 對話方塊隨即出現。

  2. 在 [ 範本] 窗格中,選取 [ XML 架構]。

  3. 將架構 命名為 employees.xsd ,然後選擇 [ 新增 ] 按鈕。

    結構描述設計工具隨即開啟。

  4. 方案總管 中,開啟 employees.xsd快捷方式功能表,然後選擇 [檢視程序代碼]。

  5. 以下列架構取代 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>
    
  6. 在 [ 檔案] 功能表上,按兩下 [ 全部 儲存],將您的變更儲存到 employees.xmlemployees.xsd 檔案。

將 XML 架構附加至檔

您必須將 XML 結構描述附加至文件,以將 DropDownListContentControl 繫結至 title 項目的有效值。

將 XML 架構附加至檔案 (Word 2013 )

  1. 在設計工具中啟動 EmployeeControls.docx

  2. 在功能區上,選擇 [開發人員] 索引標籤,然後選擇 [載入] 按鈕。

  3. 在 [範本和載入宏] 對話方塊中,選擇 [XML 架構] 索引標籤,然後選擇 [新增架構] 按鈕。

  4. 流覽至 您稍早建立的 employees.xsd 架構,其位於您的項目目錄中,然後選擇 [ 開啟 ] 按鈕。

  5. 選擇 [架構 設定] 對話框中的 [確定] 按鈕。

  6. 選擇 [ 確定] 按鈕以關閉 [範本和載入宏] 對話方塊。

將 XML 結構描述附加至文件 (Word 2010)

  1. 在設計工具中啟動 EmployeeControls.docx

  2. 在功能區上,選擇 [ 開發人員] 索引標籤

  3. 在 XML 群組中,選擇 [架構] 按鈕。

  4. 在 [範本和載入宏] 對話方塊中,選擇 [XML 架構] 索引標籤,然後選擇 [新增架構] 按鈕。

  5. 流覽至 您稍早建立的 employees.xsd 架構,該架構位於您的項目目錄中,然後選擇 [ 開啟 ] 按鈕。

  6. 選擇 [架構 設定] 對話框中的 [確定] 按鈕。

  7. 選擇 [ 確定] 按鈕以關閉 [範本和載入宏] 對話方塊。

    [XML 結構] 工作窗格隨即開啟。

  8. 關閉 [ XML 結構] 工作窗格。

將自訂 XML 元件新增至檔

您必須先將 XML 檔案的內容新增至文件中的新自訂 XML 組件,才能將內容控制項繫結至 XML 檔案中的項目。

將自訂 XML 組件新增至文件

  1. 方案總管 中,開啟 ThisDocument.csThisDocument.vb快捷方式功能表,然後選擇 [檢視程式代碼]。

  2. 將下列宣告新增至 ThisDocument 類別: 此程式碼會宣告數個物件,以用來將自訂 XML 組件新增至文件。

    [CachedAttribute()]
    public string employeeXMLPartID = string.Empty;
    private Office.CustomXMLPart employeeXMLPart;
    private const string prefix = "xmlns:ns='http://schemas.microsoft.com/vsto/samples'";
    
  3. 將下列方法新增至 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;
    }
    
  4. 將下列方法新增至 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 組件中的項目

  1. 將下列方法新增至 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 組件,並在開啟文件時,將自訂控制項繫結至資料。

在開啟文件時執行程式碼

  1. 將下面程式碼加新增至 ThisDocument 類別的 ThisDocument_Startup 方法。 此程式代碼會從 employees.xml 檔案取得 XML 字串、將 XML 字串新增至檔中的新自定義 XML 元件,並將內容控件系結至自定義 XML 元件中的元素。

    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

測試專案

開啟文件時,內容控制項會顯示自訂 XML 組件中項目的資料。 您可以按下 DropDownListContentControl 來選取元素的三個有效值之一,這些值title定義於 employees.xsd 檔案中。 如果您編輯任何內容控制項中的資料,則新的值會儲存在文件的自訂 XML 組件中。

測試內容控制項

  1. F5 執行專案。

  2. 請確認文件中的資料表類似於下表。 第二個資料行中的每個字串都會取自文件之自訂 XML 組件中的項目。

    資料行
    員工名稱 卡里娜·萊爾
    雇用日期 1999 年 4 月 1 日
    標題 經理
  3. 選擇 [員工名稱] 儲存格右邊的儲存格,然後輸入不同的名稱。

  4. 選擇 [僱用日期] 單元格右邊的單元格,然後在日期選擇器中選取不同的日期。

  5. 選擇 [標題] 單元格右邊的單元格,然後從下拉式清單中選取新專案。

  6. 儲存並關閉文件。

  7. 在 檔案總管 中,開啟專案位置下的 \bin\Debug 資料夾。

  8. 開啟 EmployeeControls.docx 的快捷方式功能表,然後選擇 [重新命名]。

  9. 將 EmployeeControls.docx.zip 檔案命名為 。

    EmployeeControls.docx 檔會以 Open XML 格式儲存。 藉由以 .zip 擴展名重新命名此檔,您可以檢查文件的內容。 如需 Open XML 的詳細資訊,請參閱 Office (2007) Open XML 檔格式簡介技術文章

  10. 開啟 EmployeeControls.docx.zip 檔案。

  11. 開啟 customXml 資料夾。

  12. 開啟 item2.xml快捷方式功能表,然後選擇 [開啟]。

    此檔案包含您已新增至文件的自訂 XML 組件。

  13. 請確認 namehireDatetitle 項目包含您在文件中的內容控制項中輸入的新值。

  14. 關閉item2.xml檔案。

下一步

您可以透過下列主題,進一步了解如何使用內容控制項:

  • 使用所有可用的內容控制項來建立範本。 如需詳細資訊,請參閱 逐步解說:使用內容控件建立範本。

  • 在關閉文件時,修改自訂 XML 組件中的資料。 下次使用者開啟文件時,繫結至 XML 項目的內容控制項會顯示新的資料。

  • 使用內容控制項保護文件的組件。 如需詳細資訊,請參閱 如何:使用內容控件保護檔的元件。