APP下载

使用XML快速生成常见类型文档设计与实现

2013-08-20王良成谭露

网络安全技术与应用 2013年2期
关键词:字符串单元格文档

王良成 谭露

西南石油大学 四川 610000

0 前言

Microsoft Office 2007开始采用了基于 XML的文件格式,这种新的文件格式称为Office Open XML格式,Office Open Xml增强了文件与数据的管理能力,数据恢复能力,以及与业务线系统的互操作能力。而PDF也支持通过XML文档进行存储。基于以上理论基础本文提出一种通过XML文档直接生成如Word、Excel、PDF这些类型文档解决方案。

1 当前流行的常见文档生成流程

当前生成常见类型文档大多都是通过提供的对象模型提供的对象进行交互,通过调用相关类型文档提供的com对象,如生成Excel本地则调用Office COM组件,以生成Excel文档为例,部分代码如下:

这样我们可以通过ws对象操作Excel的行列并将相应的数据插入其中。这种方式采用的是对Excel表所有内容以对象的形式操作以完成单元格内容的填充。这种生成文档方式的主要缺点:

(1) 频繁的对文档内的相关内容进行查找和插入操作比较耗资源。

(2) 操作通过调用com接口,生成大量的操作对象并这些对象一直在内存中直到文档生成结束,如果生成的文档过大,将会花费很长的时间并可能造成内存溢出导致读写异常等问题,因此这种方法只适用文档比较小,当文档过大时用户体验度非常不好,基于以上问题本文提出了使用 XML快速生成文档的方案。

2 基于XML快速生成常见类型文档设计

2.1 总体流程

本实现方案中,首先获取数据库数据,在数据转换层,按照文档类型调用特定的xml模版并根据模板定义的XML Schema将数据以节点的形式插入到xml文档中,通过这种方式可以快速生成常见文档。操作流程如图1所示。

图1 处理流程

2.2 生成xml文档

通过xml生成Word 、Excel还是PDF文档关键要生成以该种类型文档内部XML结构文件,通过填充XML结构文件来完在这个文档的构建,这样不需要生成很多对象精确的对文档单元格内容的操作,完全直接生成一个包含XML内容的字符串。通过这种操作完全也可以实现对文档的任何单元格进行操作。本文将以生成Excel为例介绍这种生成文档的方案,其它类型文档生成过程相似。

2.2.1 生成Excel文档的xml模板介绍

(1) xml模板内容:

(2) 模板内容简介:

使用 StringTemplate模板引擎技术将模板中的占位符替换成文档数据内容。

2.2.2 生成XML节点数据

通过XML生成Excel文档主要问题是如何将数据生成Excel支持的XML文档。XML文档中括两方面内容:Excel显示数据、Excel显示数据的格式数据(如居中,加粗等格式控制)。本文采用树节点的形式来存储这些数据,节点数据有单元格内容,单元格内容格式数据。本文本设计的存储结构DataNode类部分属性如下所示:

ArrayList<ExportAttr> attributes用来保存数据集中的数据,通过创建节点对象dataRowNode,利用dataRowNode对象的attributes属性包含数据集中的所有数据,关键字为字段名,属性值为字段值,dataRowNode即为一行数据的集合。然后将存储一行数据的 dataRowNode对象添加到HashTableAddVaules vRows对象中,这样vRows对象中将包含所有行记录的转换。

2.2.3 生成XML格式文档数据

将生成的树节点通过StringTemplate来生成包含XML文档的字符串。StringTemplate是一个模板引擎库(支持多种编程语言),可以用于生成源代码、Web页面、电子邮件等各种有格式的文本。简单来说就是一个能够自动替换占位符的替换引擎节点。

部分实现代码如下:

2.3 以文件流的形式写入Excel

这步操作是将生成的xml格式的字符串以文件流的形式生成Excel文档,通过这步操作完成Excel文档生成操作,部分具体实现如下代码:

3 总结

生成Word、PDF思路相似,只需要将XML模板替换成Word、PDF格式的XML架构。生成Word、Excel、PDF等类型文档作为应用程序数据输出重要功能之一,利用它们支持XML格式生成可以高效的生成这些类型的文档,本文提出通过生成XML文档,将大量数据集中的数据转换成xml格式字符串,然后直接生成文档。这种生成方式不仅仅只支持 Word、Excel、PDF类型的文档,只要能通过 XML格式类型的文档都可以通过这种方式快速生成。

[1]如何操作Office Open XML格式文档.http://www.microsoft.com/.

[2]StringTemplate.官方网站 http://www.stringtemplate.org/.

[3]XML3.0技术内幕[M].北京:清华大学出版社.2001.

猜你喜欢

字符串单元格文档
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
流水账分类统计巧实现
基于文本挖掘的语词典研究
玩转方格
玩转方格
浅谈Excel中常见统计个数函数的用法
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
最简单的排序算法(续)