admin 管理员组

文章数量: 1086019


2024年4月20日发(作者:mysql 单个备份数据库)

基于XML的地下管线成果表生成方法

樊伟平

【摘 要】本文通过对比现行的地下成果表生成方法,在对Excel和XMl文件研究的

基础上,提出了一种基于XML格式模板解析的地下管线成果表生成方法,通过本方

法,可以高效批量的导出对格式要求复杂的地下管线成果表.

【期刊名称】《城市勘测》

【年(卷),期】2018(000)0z1

【总页数】4页(P298-301)

【关键词】地下管线成果表;Excel;XML;VBA

【作 者】樊伟平

【作者单位】中煤(西安)地下空间科技发展有限公司,西安 710199

【正文语种】中 文

【中图分类】P209

1 引 言

地下管线数据对于城市管理、规划有着非常重要的意义,现阶段,我国大部分城市

已经进行了地下管线普查工作,地下管线普查阶段的主要数据成果有地下管线成果

表,地下管线成果图,地下管线成果库。地下管线成果表的编制是地下管线普查数

据处理的一项重要工作,地下管线成果表一般要求以Excel的xls格式保存,以城

市基本地形图图幅为单位分专业进行整理编制,并装订成册。每一图幅各专业管线

成果的装订顺序应按给水、排水、燃气、热力、电力、电信、工业管道、其他专业

管线顺序执行,成果表装订成册后应在封面标注图幅号并编写制表说明[1]。面

对大量的地下管线数据,设计一个表格样式可以由用户灵活设计,通用的成果表生

成系统是一个具有实际意义的研究课题。

2 成果表生成现状

现阶段,地下管线成果表基本上结束了人工手动编辑的落后方法,地下管线成果表

的生成都是基于电脑程序自动化完成。常用的Excel报表生成方式有三种:①调用

Office的COM组件进行报表导出[2];②利用第三方软件库;③利用VBA生

成Excel文件。

第一种方式需要在安装 Office软件的前提下,调用Office的COM组件、引入

Microsoft Excel Object Library完成导出工作[3-5],该过程冗杂,进程较慢,

若要完成多数据导出或多用户操作,需要产生多个Excel进程,这一缺陷在导出自

定义复杂表格的时候颇为显著;第二种方法依赖于第三方软件或库,第三方软件或

库种类众多且大部分为商用,无法由程序人员自由控制;第三种方法需要安装

Office软件,利VBA生成文件,但在大数据量且需要对不同格式的单元格渲染时,

运行速度较慢,并且不易和已有基于非VB语言建设的地下管线数据处理系统无缝

整合。

XML是一种可扩展性标记语言,其自描述性使其非常适用于不同应用间的数据交

换,而且这种交换是不以预先规定一组数据结构定义为前提。XML最大的优点是

它对数据描述和数据传送的能力,因此具备很强的开放性[6]。从 Office 2003

系列开始,微软增加了对 XML技术的支持。本文在对XML和Excel的进行深入

研究后,提出一种基于XML解析技术高效自动生成xls格式地下管线成果表的方

法,采用模板技术,数据与表现分离,以XML为载体经过解析进行动态报表的生

成。

3 成果表生成设计

3.1 XML 格式的 Excel模板文件结构分析

(1)xls格式成果表模板分析

地下管线成果表包括封面、制表说明、目录、成果表模板工作表,格式也比较复杂,

如图1。

图1 xls格式成果表模板

其中,制表说明的内容比较固定,其余三个工作表都有根据数据变化的部分。成果

表模板工作表的字体大小,单元格边框,单元格合并,单元格对齐模式等格式变化

较多,还包括复杂的表头,以及包括页码及检查员等随数据变动的页脚。

(2)XML格式成果表模板分析

Excel提供了导出XML格式的功能,通过将成果表导出为XML格式,如图2。

图2 XML格式成果表模板

通过XML格式成果表模板可以看到,Workbook和 Worksheet 分别是工作薄和

工作表标签,每个工作表中包 含一个表格(Table),表格中包含若干行(Row),

每行包含若干个单元格 (Cell)。其中单元格的样式由Cell标签的属性“ss:

StyleID”进行描述,Cell的内层标签 Data 的属性“ss:Type”描述数据类型,

标签内容描述数据值[6]。XML格式的 Excel文档结构树的简明结构如图3所示。

图3 XML 格式的 Excel文档结构图

3.2 技术流程

技术流程图如图4。

基于XML 模板的成果表生成方法,能将管线数据与格式相分离。在开发过程中,

将成果表的表格样式、字体样式等格式内容由Excel成果表模板实现,通过基于转

换的XML成果表模板的解析,对于变化部分如管线数据、探测单位信息、图幅信

息、页码等由程序中的代码实现填入。这样,在程序开发过程中只需关心变化的管

线数据,而不必花费精力关注Excel表格样式,利用XMl文档读取速度较快的优

点,从而实现高效导出表格。

图4 流程图

3.3 功能实现

(1)界面设计

界面设计需要考虑数据组织的灵活性,需要提供包括管线类型选择,单元格填充数

据组织的界面接口,可以指定模版,对表头,最大行数,表头行数可以自定义输入,

数据保存时可以指定文件名格式,可以自由选择数据范围,主要的数据导出界面如

图5。

图5 数据导出界面

(2)代码设计

主要代码及注释如下:

1. List lstPiep = GetTreeViewCheckZlmc(treeViewUserSelect);

//准备数据

2. List lstLimit = ect;

3. string arrFields= GetInXlsFields();

4. DataTable dtSheet = GetDataTablePer WorkSheet(pipeZLMC,

limitFields,limitValue);

5. XmlDocument doc = new XmlDocument();

6. (moudlePath);//读取模板

7. //封面

8. XmlNode xmlFm = SingleNode("/ns0:Workbook/ns0:

Worksheet[@ss:Name='封面']/ss:Table/ss:Row/ss:Cell[ss:Data='

图幅号']",xnm);

9. XmlElement xeFm = (XmlElement)Node;

10. Attribute("ss:Expanded ColumnCount");

11. Attribute("ss:Expanded RowCount");

12. ext = limitFields + ":"+limitValue;

13. //目录

14. XmlNode xmlMl = SingleNode("/ns0:Workbook/ns0:

Worksheet[@ss:Name='目录']/ss:Table/ss:Row/ss:Cell[ss:Data='

管 类 ']",xnm);

15. XmlNode xMlCopy = Node;

16. //计算页码

17. startPageNumber = startPageNumber + 1;

18. //生成目录

19. if (xmlMl != null)

20. {

21. XmlNode xMLYmCopy = ();

22. ext=

[ii].TableName;

23. ext =ng

();

Child(xMLYmCopy);

25. }

26. //成果表

27. xmlN = SingleNode("/ns0:Workbook/ns0:Worksheet

[@ss:Name='成果表模板']",xnm);

28. if ( == "Table")

29. {

30. //得到行

31. XmlNode xRowCopy = null;

32. f o r e a c h(X m l N o d e x T b I t e m s i n odes)

33. {

34. if ( == "Row")

35. {

36. if( !="NamedCell")

37. {

38. xRowCopy = xTbItems;

39. }

40. }

41. }

42. }

43. XmlNode rowNew = ();//复制行

44. inText = [j][xlsFieldArrs[k]].ToString();//单元格

内容

45. odes[k].ext= inText;//赋值

46. Child(rowNew);//添加至XML文档

47. //保存

48. FileStream fiosave = new FileStream

(saveFilePath+""+limitValue+".xls",);

49. (fiosave);

50. e();

4 结 语

本文利用C#语言开发,基于XML模板解析方法实现了Excel地下管线成果表的

导出。通过定制Excel模板,利用XML格式的模板解析方法,使数据与格式表现

分离,利用XML文件的快速读写特性可以高效实现海量数据的导出,同时满足对

导出表格格式的复杂要求。在工程实践项目运用中,较传统利用VBA制作成果表

的速度提升了数倍,可以高效处理批量数据导出工作。

参考文献

【相关文献】

[1] 洪立波,周凤林,区福邦.CJJ61-2003,城市地下管线探测技术规程[S].北京:中国建筑

工业出版社,2003.

[2] 蔡小艳,李龙腾,葛玉等.基于C#的 Excel数据导入导出研究与实现[J].智能计算机与应

用,2014(5):83-85.

[3] 潘福成,张士杰.基于XML的智能报表生成工具的研究[J].小型微型计算机系统,2005,

26(1):134- 138.

[4] 周一,王世耕,黄忠全等.基于FastReport 的通用报表系统的设计与实现[J].计算机应用

与软件,2008(2):284-285.

[5] 张亚平,贺占庄.B/S架构下动态报表的一种实现方式[J].计算机技术与发展,2007(4):

93- 95.

[6] 王勇超,张璟等,马静,王新卫,杨凯锋.利用XML和Excel 设计动态通用报表系统的新方

法[J].现代电子技术,2008(18):93-96.


本文标签: 成果 数据 管线 格式 模板