使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表

时间:2022-07-01 13:19:37

基础:微软官方的解释XML与Word    

 

关于 Word 中的 XML 文档

适用于: Microsoft Office Word 2003

 注释   除了将文档保存为带 Word XML 架构的 XML,其他的 XML 功能只能在 Microsoft Office Professional Edition 2003 和独立的 Microsoft Office Word 2003中使用。

为什么使用 XML?

可扩展标记语言 (XML) (可扩展标记语言 (XML):标准标记语言 (SGML) 的一种浓缩形式,开发人员可用其创建自定义标签,为整理和提供信息提供了灵活性。) 使您能够以以前不可能或很难实现的方式组织和处理文档和数据。使用自定义 XML 架构,可以从普通商业文档中识别并提取出特定的商业数据片段。

例如,一张包含客户姓名和地址的支票,或者一份包含上季度财务结果的报表都不再是静态文档。它们包含的信息可以被传送到一个数据库或在文档外部的其他地方重用。

将 Microsoft Word 文档以标准 XML 格式保存的能力有助于将内容从文档范畴中分离出来。内容可用于自动化数据采集和用途变更过程。内容能够很容易地被搜索到,甚至被 Word 以外的其他进程所修改,例如基于服务器的数据处理。

因为 Word 能够将其文档表示为 XML,通过将来自各种源的数据放在一起,自动化的基于服务器的进程可以在运行中生成 Word 文档。这样的文档能够很容易地定期更新,排除了相关数据的手动搜索和不必要的重新键入。

Word 和 XML

Microsoft Word 允许您以两种方式处理 XML 文档:

保存文档时,Word 架构和自定义架构都被默认附加到文档,保留自定义架构定义的数据和 Word XML 架构定义的丰富格式。根据自定义架构,还可以选择仅保存数据。

无论是用内置的 Word XML 架构定义 Word 文档结构,还是附加自己的架构来定义更适合您业务的结构,任何能够分析 XML 的软件都能阅读并处理您保存为 XML 格式(.xml 文件)的文档中的数据。

例如,如果将自定义架构用于简历数据,文档中的 XML 标记将会按照姓名、地址、工作经历、教育等来定义文档结构。保存该文档时,您同时拥有一个打印时看起来很专业的格式丰富的文档,和一个能够被任意可处理 XML 的程序所处理的数据文件。

还可以将 XML 数据存储在保存为 Word 文档 (.doc) 或模板 (.dot) 的文档中。但是,只有 Word 能够读懂或处理该 XML。

XML 标记

将自定义 XML 架构附加到文档时,“XML 结构”任务窗格将提供该架构中定义的元素的一个列表。选择文档内容,然后从该列表中选择一个元素,可以将 XML 标记应用到文档。如果架构定义了某个元素的属性,还可以在“XML 结构”任务窗格中指定这些属性。

 注释   可以为一个文档附加多个架构。来自所有附加架构的元素会在“XML 结构”任务窗格的元素列表中列出。

窗格上的复选框允许您在文档上下文中查看内嵌的 XML 标记。

如果文档结构不符合架构规则,将会在文档中以紫色波浪线标记出来,并在“XML 结构”任务窗格中报告此违规错误。

XSL 转换

打开或保存 XML 文档时,可以应用以特定格式呈现 XML 数据的 XSL 转换 (XSLT) (XSL 转换 (XSLT):一种文件,用于将 XML 文档转换为其他类型的文档,例如 HTML 或 XML。设计本意是作为 XSL 的一部分使用。) 文件。例如,您可能拥有一个将数据显示为规范的 XSLT,和另一个将相同数据显示为部件清单(其中计算了数量和价格)的 XSLT。

使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表打开文档时应用的 XSLT

一个 XML 文档可能拥有多个与其关联的 XSLT。如果是这样,则必须选择您希望使用的 XSLT 来显示文档。这是在“XML 文档”窗格中完成的,该窗格列出了可用的 XSLT(数据视图)。

如果没有与 XML 文档关联的 XSLT,则 Word 会使用其默认 XSLT 或“仅数据视图”打开该文档。

如果文档附加了 Word XML 架构,即使该文档拥有一个与其关联的 XSLT,Word 打开文档时也不会应用该 XSLT。

 注释   可以定义解决方案将 XSLT 与特定类型的 XML 文档关联,而不是手动地应用 XSLT。需要在“架构库”中进行这种关联,可以在“模板和加载项”对话框(“工具”菜单)的“XML 架构”选项卡*问“架构库”。

 

使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表保存文档时应用的 XSLT

 

 

 

 

实现:

     XML Schema 是用来定义XML的结构文件,可以称之为XSD文件。而在Word及Excel中都支持添加架构文件,这样我们就可以使用XSD定义模板架构,将模板保存成XML格式,在报表生成时可以使用该模板生成相应的报表。

 

首先第一步:生成相应的XSD文件。

    

    根据面向对象的思想,现大多都是使用三层架构,就算多层其基本也是变,在Model层中有各实例对象若是使用NHibernate、第三方的数据访问层(如动软生成的)、微软的实体框架集等均是可以的。它只是根据实体类生成相应的架构文件。具体操作是:先将实体层在vs环境中生成dll文件,然后在VS的命令提示中输入【xsd  dll文件的路径】生成成功后,可以看到一个后缀为Xsd的文件路径。

 

第二步:生成模板

      找到路径下的xsd文件,如果是制作Word文档的模板(本文以Word为例),在新建的doc文件中,工具-模板与加载项-架构-添加架构  选择刚才生气的xsd文件,填上URL(命名空间)如:http://www.mt178.com ,最好是选上 允许以XML文件保存不论是否有效。这样就可以查看到XML结构,然后在相应的位置插入相应的元素,同时还可以调整格式如:

使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表

 

完成后将其另存为xml格式文件,这样模板就做好了。

 

第三步:生成报表

这里我使用了一个封闭好了的类,其调用方式

 

使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表代码
   
   
   
lxp.ASC_BusinessReportThingInfo asc = new lxp.ASC_BusinessReportThingInfo( 1 ); // 实体类
asc.Name = " 叩亦杰 " ;
asc.Birthday
= DateTime.Now;
// 设置类中属性值

WordReport rt
= new WordReport( @" E:\Word与Exsel报表学习\Word\lxp.xml " ); // 加载模板,Excel时就使用ExcelReport
rt.InputData(asc); // 加入数据
rt.Save( @" E:\Word与Exsel报表学习\Word\生成的lxp.doc " ); // 保存

 

 

这样用户可自定生成的报表基本实现。