一种测绘成果报告高效定制方法

2021-07-25 10:04吴小龙卢尚龙李旺民
地理空间信息 2021年7期
关键词:单元格开源表格

吴小龙,卢尚龙*,李旺民

(1.珠海市测绘院,广东 珠海 519000)

城市测绘即在城市开展的测绘活动,主要任务是为城市的规划、建设与管理提供测绘地理信息支撑保障服务,主要内容包括平面和高程控制测量、工程测量、土地审批测绘、规划监督测绘、人防竣工验收测量、不动产权籍调查以及4D产品生产等。近年来,随着城市规划建设管理需求的提升和测绘地理信息技术的发展,城市测绘的工作内容、服务领域和成果形式不断扩大,涉及大量专题测绘成果报告的定制输出。传统方法一般基于VBA开发成果输出功能,在一定程度上提高了作业效率;而在实际生产中,该方法存在严重依赖Office版本、代码维护困难、效率偏低等问题。

1 传统VBA方法遇到的问题

VBA是捆绑在Microsoft Application应用程序上的一个简单的Visual Basic程序语言,其特点是将VB语言与应用对象模型结合起来,以编程的方式来处理Word/Excel中的各种对象。测绘成果报告大多为Word或Excel格式,一般采用VBA开发成果定制功能,面临的问题为:

1)基于VBA方式操作Excel、Word,需在服务器或客户端安装Oきce,并及时更新以防漏洞,特别是服务器端,若在导出过程中出问题则可能导致服务器宕机。

2)Excel能自动分析字段类型,但对于文本、日期等字段类型容易出现强制格式化为数字的情况,造成信息表达错误,如字段内容以“-”或“=”开头,Excel将其当成公式,产生错误。

3)VBA的各个版本间存在兼容性问题,会出现成果报告格式错乱的情况。

4)VBA效率相对较低,尤其是在数据量较大时,边写数据边刷新的方式,将大大降低输出效率。

为了解决上述问题,本文利用NPOI开源库替代Excel VBA处理Excel文档,利用DocX开源库替代Word VBA处理Word文档,以实现测绘成果的高效定制。

2 基于NPOI的Excel报表定制

POI是一套利用Java编写的开源库,能帮助开发者在没有安装微软Office的情况下读写Word/Excel文档。NPOI,即POI的.NET版本,是一个开源的C#读写Excel、Word等微软OLE2组件文档的项目。NPOI的特点为:①采用Apache 2.0许可证,可免费用于任何商业或非商业项目;②读写速度快、稳定性好,采用面向接口的设计架构,比Office PIA的API更加方便、更人性化;③完美支持Excel,包含了大部分Excel的特性(单元格样式、数据格式、公式等);④无需安装Office,可避免版权以及Office各版本间的兼容性问题。

目前NPOI包含若干个Assembly,作用各有不同,开发人员可按需加载相应的 Assembly。例如,NPOI.Util为基础辅助库,NPOI.POIFS为OLE2格式读写库,NPOI.DDF为Microsoft Drawing格式读写库,NPOI.SS为Excel公式计算库,NPOI.HPSF为OLE2的Summary Information和Document Summary Information属性读写库,NPOI.HSSF为Excel BIFF格式读写库。

NPOI采用HSSFWorkbook类来处理xls,采用XSSFWorkbook类来处理xlsx,它们都继承接口IWorkbook,因此可通过IWorkbook统一处理xls和xlsx格式的文件。一个Excel文件即一个Workbook对象,可包括多个Sheet表对象,每个Sheet表又包括了大量单元格对象,单元格是Excel中最有意义的对象。Excel底层中的单元格具有不同类型,如数字(NumberRecord)、空单元格(BlankRecord)、文本(LabelSSTRecord)等,设置单元格时需告诉NPOI创建单元格的类型;同样在读取时需根据格式的不同设置对象的不同类型,方便后期的数据处理。NPOI中SetCellValue、GetCellValue函数分别用于设置/获取单元格的值。通常是打开已有的模版文件,将数据填入指定Sheet的单元格,并根据需要对单元格的格式进行处理(包括行高、列宽、字体、单元格合并等)即可。

3 基于DocX的Word报表定制

早期的文档格式(如doc、xls、ppt)基于OLE2标准,OLE2是二进制格式,文档以二进制的形式对不同的数据流进行存储。OpenXML标准是微软新一代办公软件文档格式标准,是由微软开发的一种以XML为基础并以ZIP格式压缩的电子文件规范,支持docx文档、xlsx电子表单文档、pptx幻灯片文档等,2007以及更高版本的Office文档均基于该标准。OpenXML复合文档将数据流以XML格式分别描述,通过ZIP压缩文件形式合并到一起。微软推出了Open XML SDK,专门帮助.NET语言与Office实现互操作,这也成了COM组件外的新选择,但它的安装包有100 M,对很多部署来说,难度不小。

DocX是一个在无需安装Word的情况下对Word进行操作的开源轻量级.NET组件,可轻便操作Word,有利于减轻开发负担,提升程序效率。采用DocX需要.NET Framework4.0和VS2010或更高版本。DocX的特点为:①代码开源,有免费版与收费版,免费版功能可满足大多数测绘成果报告的定制需求;②支持在文件中插入、删除和替代文本,支持所有的文本格式,如字体、下划线、高亮等;③支持插入图片、超链接、表格、页眉页脚以及自定义属性等;④支持类似JQuery的链式写法,很方便编程开发;⑤无需安装Office,可避免版权以及Office各版本间的兼容性问题。

DocX中一个Word文档的主要对象包括文档(Document)、段落(Paragraph)、书签(BookMark)、图像(Image)、表格(Table)和自定义属性(CustomProperty)等。测绘成果报告通常有一定的模版,利用模版文件可使Word成果报告的定制开发更加简单。一般来说,Word报表定制主要包括文档打开(DocX.Load方法)、文本替换(DocX.ReplaceText方法)、表格填写(Table.Rows.Cells.Paragraphs.InsertText方法)、图像插入(InsertPicture方法)、文档合并(DocX.InsertDocument)、文档保存(DocX.Save)等工作。

4 测试与比对

城市测绘中不动产权籍调查、人防竣工验收测量、规划监督测绘的成果报告包括大量的面积信息填写和分层分户图输出;而土地勘测定界测绘的成果报告则包括大量界址点和图斑信息的输出。一般通过定制成果模版的方式,将信息或专题图片写到模版的指定位置,因此表格数据填写、图片插入是影响成果报告输出效率的关键因素。本文基于VBA和.NET分别开发了测试程序,以验证两种方法的效率和用户体验效果。测试程序界面如图1所示。

图1 工程测量测试程序

测试内容包括影响成果报告定制效率的表格数据填写、图片插入两个方面,测试数据为横琴新区某项目图斑1 020个节点坐标成果,以文本方式存储;规划条件核实分层平面图100张,每张约1 M,为WMF文件。效率对比如表1、2所示,可以看出,对于Word成果报告的定制,相较于VBA,本文方法在表格填写方面效率提升10倍以上,但图片插入随着文件的增大而效率有所降低,总体来说,本文方法效率提升了两倍以上;对于Excel成果报告的定制,相较于VBA,本文方法在表格填写方面效率提升了约28倍,图片插入效率提升了约27倍,总体来说,本文方法效率提升了约27倍;对于用户体验方面,VBA运行时若用户进行其他操作则容易导致结果出错,而本文方法全程后台运行,不影响用户其他操作,用户体验更好。

表1 Word效率对比分析/ms

表2 Excel效率对比分析/ms

5 结 语

本文采用NPOI和DocX开源库实现了不依赖Microsoft Oきce软件的测绘成果报告高效定制,解决了传统VBA方法存在的兼容性差、效率偏低等问题,且代码简洁、便于维护。此外,本文方法支持将开发的模块作为后台服务部署于服务器,不占用客户端资源,响应并发用户需求,具有更好的用户体验。然而,DocX在处理大文件时,会出现效率降低的情况,但相对于其轻量级插件的定位来说,总体效率和优势是较明显的。

猜你喜欢
单元格开源表格
《现代临床医学》来稿表格要求
《现代临床医学》来稿表格要求
流水账分类统计巧实现
玩转方格
玩转方格
统计表格的要求
五毛钱能买多少头牛
浅谈Excel中常见统计个数函数的用法
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0