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

在仅保存自定义 XML 数据时,在生成的 XML
文件中将丢弃文档中未用附加架构中的元素标记的所有内容。

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

Word
文档是许多电脑用户写作时使用的文件格式,当您辛辛苦苦写完一篇Word文档后,发现它因损坏而无法打开时,一定非常着急。其实,您不必心焦,因为我们还是有一些方法可以修复损坏文档,恢复受损文档中的文字。下面是具体的步骤。

Word 可以根据附加到 XML 文档的 XML
架构的规则,验证该文档。架构冲突显示在“XML
结构”任务窗格中,它们也显示在文档中。

1、单击“Office 按钮”,然后单击“另存为”。2、在“保存类型”框中,单击“Word
2003 XML
文档”。3、在“文件名”框中,键入相应文档的名称。4、选中“仅保存数据”复选框。5、如果要使用可扩展的样式表语言转换
:一种文件,用于将 XML 文档转换为其他类型的文档,例如 HTML 或
XML。设计本意是作为 XSL 的一部分使用。)
设置文档的格式,请选中“应用转换”复选框,然后单击“转换”以找到 XSLT
文件。注意:如果在保存文件时应用 XSLT,Word 会丢弃 XSLT
未使用的所有数据。5、单击“保存”。

 

1 采用专用修复功能

提示:若要在应用 XML 标记时避免出现验证错误,请选中“XML
结构”任务窗格中的“仅列出当前元素的子元素”复选框。

关于 Word 中的 XML 文档

适用于: Microsoft Office Word
2003

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

①在“文件”菜单上,单击“打开”。

1、在“开发工具”选项卡上的“XML”组中,单击“架构”。2、在“架构验证选项”下,执行下列一项或两项操作:
-若要强制执行验证,请选中“使用附加架构验证文档”复选框。 -若要防止 Word
保存无效的文档,请清除“允许另存为 XML
”复选框。3、当您在文档中工作时,请使用“XML
结构”任务窗格检查文档的有效性。在每个元素旁都会显示一个图标,用于指示该元素是否无效以及冲突的特性。此外,架构冲突在文档中还标有波浪线。

为什么使用 XML?

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

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

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

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

②在“查找范围”列表中,单击包含要打开的文件的驱动器、文件夹或Internet
位置。

关闭波浪线

Word 和 XML

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

  • 使用 Word XML 架构     可以在 Word
    中创建一个文档,然后将其保存为 XML 文档。Word 使用它自己的 XML
    架构 (XML 架构:以
    XML 编写的正式规范,定义了 XML
    文档的结构,包括元素名和丰富的数据类型,以及哪些元素要以组合形式出现,每一元素具有哪些属性。))、WordML
    来应用存储信息(例如文件属性)的 XML
    标记,并且定义文档的结构(例如段落、标题和表格)。根据 Word XML
    架构,Word 还使用 XML 标记存储格式和版式信息。
  • 使用任意 XML 架构     可以在 Word
    中创建或打开一个文档,将任意自定义的 XML 架构附加到该文档,并将 XML
    标记应用到文档内容。将文档另保存为 XML 文档时,XML
    标记会根据附加到该文档的 XML 架构定义文档结构。

www.9778.com:使用XML Schema 定义结构在.NET环境下生成自定义的Word及Excel报表。保存文档时,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
结构”
任务窗格中报告此违规错误。

④选择要恢复的文件。

1、在“开发工具”选项卡上的“XML”组中,单击“架构”。2、单击“XML
选项”。3、在“架构验证选项”下,选中“隐藏文档中的架构冲突”复选框。

XSL 转换

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

www.9778.com 1打开文档时应用的
XSLT)

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

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

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

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

 

www.9778.com 2保存文档时应用的
XSLT)

 

 

 

 

实现:

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

 

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

    

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

 

第二步:生成模板

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

www.9778.com 3

 

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

 

第三步:生成报表

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

 

www.9778.com 4www.9778.com 5代码

        lxp.ASC_BusinessReportThingInfo asc = new lxp.ASC_BusinessReportThingInfo(1);//实体类
        asc.Name = "叩亦杰";
        asc.Birthday = DateTime.Now;
//设置类中属性值

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

 

 

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

⑤单击“打开”按钮旁边的箭头,然后单击“打开并修复”

 “打开并修复”是Word 2002/2003
才具有的功能,如果该方法仍不能打开受损文档,或者您使用的是Word
97/2000,可以试试以下方法。

2 提取文字法

①在“工具”菜单上,单击“选项”*“常规”选项卡。

②确认选中“打开时确认转换”复选框,然后单击“确定”。

③单击常用工具栏上的“打开”按钮。

④在“文件类型”框中,单击“从任意文件中恢复文本”。

⑤像通常一样打开文档。

在使用上述方法打开受损Word
文档后,如果文档内容显示混乱,请继续以下工作。

3 转换文档格式

将Word文档转换为另一种格式,然后再将其转换回Word
文档格式。这是最简单和最彻底的文档恢复方法,请始终先尝试这种方法。

①在Word 中打开损坏的文档。

②在“文件”菜单上,单击“另存为”。

③在“保存类型”列表中,单击“RTF 格式(*.rtf)”,然后单击“保存”。

4 粘贴为新文档

Word
用文档中的最后一个段落标记关联各种格式设置信息,特别是节与样式的格式设置。如果将最后一个段落标记之外的所有内容复制到新文档,就有可能将损坏的内容留在原始文档中。在新文档中,重新应用所有丢失的节或样式的格式设置。选定最后一个段落标记之外的所有内容的方法是:在“工具”菜单上,单击“选项”*“编辑”,清除“使用智能段落选择范围”复选框,单击“确定”按钮,然后按“Ctrl+End”组合键,再按“Ctrl+Shift+Home”组合键。

www.9778.com,5 重命名模板

Word在Normal.dot模板文件中存储默认信息。如果该文件被损坏,则Word文档中也许会出现奇怪的内容。

①关闭Word。   

②单击“开始”*“搜索”*“所有文件和文件夹”。   

③在“全部或部分文件夹名”框中,键入“normal.dot”。   

④在“在这里寻找”列表中,单击安装Word 的硬盘盘符,然后单击“搜索”。   

⑤右键单击结果列表中的“Normal”或“Normal.dot”,然后单击“重命名”(如图)。
  

⑥为该文件键入新的名称,例如“Normal.old”,然后按回车键。   

之后,启动Word,由于Word 无法识别重命名的Normal
文件,Word将创建一个新的Normal
模板。创建新的Normal模板后,请尝试打开您的文档。如果可以正确打开,则旧的Normal模板可能已损坏。如果您的文档还用到了Normal.dot
之外的其他模板,该模板也可能已损坏。请尝试重新创建模板或使用它的较早版本。