共用方式為


逐步解說:將內容控制項繫結至自訂 XML 組件

本逐步解說示範如何將 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

先決條件

您需要下列組件才能完成本步驟解說:

建立新的 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,以在PlainTextContentControl第一個儲存格中新增一個PlainTextContentControl。

  7. 在表格的第二欄中,選擇第二列 (在 [僱用日期] 旁邊)。

  8. [控制項] 群組中,選擇 [日期選擇器] 按鈕 [DatePickerContentControl],將 a 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 群組中,選擇 Schema ( 結構描述 ) 按鈕。

  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. 確認 name、 和hireDatetitle元素包含您在文件中內容控制項中輸入的新值。

  14. 關閉 item2.xml 檔案。

後續步驟

您可以從下列主題進一步瞭解如何使用內容控制項: