檔層級自定義中的 XML 架構和數據
重要 本主題中有關 Microsoft Word 的資訊,僅針對位於 美國 及其所在地區或正在使用或開發在 Microsoft 2010 年 1 月之前授權的 Microsoft Word 產品所執行之 Microsoft Word 產品的個人或組織,在 Microsoft 移除了與 Microsoft Word 自定義 XML 相關的特定功能實作時所提供之權益和使用。 有關 Microsoft Word 的資訊,不得供 美國 或其境內使用或開發在 2010 年 1 月 10 日之後由 Microsoft 授權的 Microsoft Word 產品,或開發其執行程式的個人或組織所使用;這些產品的行為與在該日期之前授權或購買並授權在 美國 以外使用的產品不相同。
適用於: 本主題中的資訊適用於 Excel 和 Word 的文件層級專案。 如需詳細資訊,請參閱 Office 應用程式 lication 和項目類型所提供的功能。
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 會自動建立數個物件,並將其新增至您的專案:
控制。 對於活頁簿中的每個對應物件,會在 XmlMappedRange 程序設計模型中建立控件(適用於非重複架構元素)或 ListObject 控件(用於重複架構元素)。 ListObject只有從活頁簿刪除對應和對應的物件,才能刪除控件。 如需控件的詳細資訊,請參閱 主控件專案和主控件概觀。
BindingSource。 當您藉由將非重複的架構項目對應至工作表來建立 XmlMappedRange 時,會建立 , BindingSource 而且 XmlMappedRange 控制項會繫結至 BindingSource。 您必須將 系結 BindingSource 至符合對應至檔之架構的數據源實例,例如已建立之具型 DataSet 別類別的實例。 藉由設定 和 DataMember 屬性來建立DataSource系結,這會在 [屬性] 視窗中公開。
注意
BindingSource不會建立 ListObject 物件 。 您必須在 [屬性] 視窗中設定 DataSource 和 DataMember 屬性,以手動系結ListObject至數據源。
Office 對應架構和 Visual Studio 數據源視窗
Office 和 Visual Studio 資料源 視窗的對應架構功能都可以協助您在 Excel 工作表上呈現數據以進行報告或編輯。 在這兩種情況下,您可以將數據元素拖曳至 Excel 工作表。 這兩種方法都會建立控件,這些控件是透過 BindingSource 系結至數據源的控件,例如 DataSet 或 Web 服務。
注意
當您將重複的架構項目對應至工作表時,Visual Studio 會 ListObject建立 。 ListObject不會透過 BindingSource自動系結至數據。 您必須在 [屬性] 視窗中設定 DataSource 和 DataMember 屬性,以手動系結ListObject至數據源。
下表顯示這兩種方法之間的一些差異。
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 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;
}