重要 本主题中介绍的有关Microsoft Word的信息仅供位于美国及其领土之外的个人或组织的权益和使用,或者正在使用或开发在2010年1月之前由Microsoft许可的Microsoft Word产品的用户使用。在2010年1月,Microsoft从Microsoft Word中删除了与自定义XML相关的特定功能的实现。 有关 Microsoft Word 的信息,不得由在美国或其领土内使用或开发针对 2010 年 1 月 10 日之后由 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 会自动创建多个对象并将其添加到项目中:
控制措施。 对于工作簿中的每个映射对象,将在编程模型中创建控件 XmlMappedRange (对于非重复架构元素)或 ListObject 控件(用于重复架构元素)。 ListObject只能通过从工作簿中删除映射和映射对象来删除控件。 有关控件的详细信息,请参阅 主机项和主机控件概述。
BindingSource。 通过将非重复架构元素映射到工作表,可以创建XmlMappedRange,同时会创建一个BindingSource,并且将XmlMappedRange控件绑定到BindingSource。 必须将BindingSource绑定到与映射到文档的架构相匹配的数据源实例,例如一个已创建的DataSet类型的类实例。 通过设置DataSource和DataMember属性来创建绑定,这些属性在“属性”窗口中公开。
注释
不会为ListObject对象创建BindingSource。 必须通过在属性窗口中设置DataSource和DataMember属性手动将ListObject绑定到数据源。
Office 映射架构和 Visual Studio 数据源窗口
Office 和 Visual Studio 数据源 窗口的映射架构功能都可以帮助你在 Excel 工作表上呈现数据,以便进行报告或编辑。 在这两种情况下,都可以将数据元素拖到 Excel 工作表上。 这两种方法都创建通过 BindingSource 和数据源(例如 DataSet 或网页服务)绑定数据的控件。
注释
将重复架构元素映射到工作表时,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;
}