檔層級自訂中的 XML 架構和資料

重要 本主題中針對 Microsoft Word 所設定的資訊,僅適用于位於美國以外地區的個人和組織,或使用或開發的程式,以及在2010年1月之前,由 microsoft Microsoft Word 在年1月之前所授權之特定功能的執行方式,在 microsoft 從 Microsoft Word 中移除與自訂 XML 相關的特定功能。 這項有關 Microsoft Word 的資訊可能不是由美國的個人或組織、使用或在中執行的程式,或在2010年1月10日之後的 Microsoft 授權 Microsoft Word 產品所使用的這些產品的行為不像在該日期之前授權的產品,或購買並授權在美國以外地區使用。

**** 適用對象:-本主題資訊適用於 Excel 及 Word 的文件層級專案。 如需詳細資訊,請參閱 依 Office 應用程式和專案類型提供的功能

Microsoft Office Excel 和 Microsoft Office Word 提供將架構對應至檔的功能。 這項功能可以簡化匯入和匯出檔中的 XML 資料。

Visual Studio 會將檔層級自訂中的對應架構元素公開為程式設計模型中的控制項。 針對 Excel,Visual Studio 會將將控制項系結至資料庫、Web 服務和物件中資料的支援。 針對 Word 和 Excel,Visual Studio 新增對執行窗格的支援,可與架構對應檔搭配使用,為您的解決方案建立增強的終端使用者體驗。 如需詳細資訊,請參閱執行 窗格總覽

注意

您無法在 Excel 的方案中使用多部分 XML 架構。

架構附加至 Excel 活頁簿時建立的物件

當您將架構附加至活頁簿時,Visual Studio 會自動建立數個物件,並將其新增至您的專案。 這些物件不應該使用 Visual Studio 工具來刪除,因為它們是由 Excel 管理。 若要刪除這些專案,請從工作表移除對應的元素,或使用 Excel 工具卸離架構。

有兩個主要物件:

  • XML 架構 (XSD 檔案) 。 針對活頁簿中的每個架構,Visual Studio 將架構新增至專案。 這會顯示為 方案總管 中具有 XSD 擴充功能的專案專案。

  • 具型別 DataSet 類別。 這個類別是根據架構建立的。 這個資料集類別在 類別檢視 中是可見的。

架構元素對應至 Excel 工作表時建立的物件

當您將 [ XML 來源] 工作窗格中的架構專案對應至工作表時,Visual Studio 會自動建立數個物件,並將其新增至您的專案:

Office 對應的架構和 Visual Studio [資料來源] 視窗

Office 的對應架構功能和 [Visual Studio 資料來源] 視窗都可協助您在 Excel 工作表上顯示資料,以進行報告或編輯。 在這兩種情況下,您都可以將資料元素拖曳到 Excel 工作表上。 這兩種方法都會建立透過資料系結 BindingSource 至資料來源(例如 DataSet 或 web 服務)的控制項。

注意

當您將重複的架構元素對應到工作表時,Visual Studio 會建立 ListObjectListObject不會自動透過進行系結至資料 BindingSource 。 您必須 ListObject DataSource DataMember 在 [ 屬性 ] 視窗中設定和屬性,以手動方式將系結至資料來源。

下表顯示這兩種方法之間的部分差異。

XML 結構描述 資料來源視窗
使用 Office 介面。 使用 Visual Studio 中的 [資料來源] 視窗。
啟用內建的 Office 功能,可從 XML 檔案匯入和匯出資料。 您必須以程式設計方式提供匯入和匯出功能。
您必須撰寫程式碼,以將資料填入產生的控制項。 從 [ 資料來源 ] 視窗加入的控制項,會在您使用資料庫伺服器時,自動產生程式碼來填入它們,以及所需的連接字串。

架構附加至 Word 檔時的行為

當您將架構附加至檔層級 Office 專案所使用的 Word 檔時,不會建立資料物件。 但是,當您將架構元素對應到您的檔時,就會建立控制項。 控制項的類型取決於您對應的元素類型。重複專案會產生 XMLNodes 控制項,而非重複的專案則會產生 XMLNode 控制項。 如需詳細資訊,請參閱 XMLNodes 控制項XMLNode 控制項

包含 XML 架構的方案部署

您應建立安裝程式,以部署使用對應至檔之 XML 架構的解決方案。 安裝程式應在使用者電腦上的架構程式庫中註冊架構。 如果您沒有註冊架構,方案仍會運作,因為 Word 會根據檔中的專案,在使用者開啟時產生暫時的架構。 但是,使用者將無法執行驗證,或儲存用來建立專案的架構。 如需安裝程式的詳細資訊,請參閱 部署應用程式、服務和元件

您也可以將程式碼加入至專案,以檢查架構是否在程式庫中並已註冊。 如果不是,您可以警告使用者。

' Ensure that the schema is in the library and registered with the document.
Private Function CheckSchema() As Boolean

    Const namespaceUri As String = "http://schemas.contoso.com/projects"
    Dim namespaceFound As Boolean = False
    Dim namespaceRegistered As Boolean = False

    Dim n As Word.XMLNamespace
    For Each n In Application.XMLNamespaces
        If (n.URI = namespaceUri) Then
            namespaceFound = True
        End If
    Next

    If Not namespaceFound Then
        MessageBox.Show("XML Schema is not in library.")
        Return False
    End If

    Dim r As Word.XMLSchemaReference
    For Each r In Me.XMLSchemaReferences
        If (r.NamespaceURI = namespaceUri) Then
            namespaceRegistered = True
        End If
    Next

    If Not namespaceRegistered Then
        MessageBox.Show("XML Schema is not registered for this document.")
        Return False
    End If

    Return True
End Function
// Ensure that the schema is in the library and registered with the document.
private bool CheckSchema()
{
    const string namespaceUri = "http://schemas.contoso.com/projects";
    bool namespaceFound = false;
    bool namespaceRegistered = false;

    foreach (Word.XMLNamespace n in Application.XMLNamespaces)
    {
        if (n.URI == namespaceUri)
        {
            namespaceFound = true;
        }
    }

    if (!namespaceFound)
    {
        MessageBox.Show("XML Schema is not in library.");
        return false;
    }

    foreach (Word.XMLSchemaReference r in this.XMLSchemaReferences) 
    {
        if (r.NamespaceURI == namespaceUri)
        {
            namespaceRegistered = true;
        }
    }

    if (!namespaceRegistered)
    {
        MessageBox.Show("XML Schema is not registered for this document.");
        return false;
    }
    
    return true;
}

另請參閱