APP下载

一种VC驱动Office组件的报告自动生成方法

2019-10-21拜晓蒙孔月萍傅彦茹俞锶浩

科技风 2019年14期

拜晓蒙 孔月萍 傅彦茹 俞锶浩

摘要:基于VC平台开发的应用软件中,为方便自动地生成规范化信息处理报告,设计了拟生成报告的Office Word格式模板,构建了VC驱动Office Word创建Word报告文件、自动填入结果参数和统计图表,形成可打印正式报告的技术方法,并以光伏阵列优化配置报告为例进行了报告自动生成方法的编程实现。实验表明该方法生成的信息处理报告结构灵活、图文并茂、可适应各种需求。

关键词:VC驱动Word;报告自动生成;OLB类型库

在绝大多数Visual C++(以下简称VC)平台开发下的应用软件系统中,往往具备信息处理和数据统计功能,它们的加工结果一般会用两种方式输出,其一是输出到终端屏幕上供用户浏览,其二是编辑成特定样式的报告文件供打印输出成纸质版,后一种方式需要设计处理结果或统计图表输出到可保存磁盘文件的方式,[1]后期可能还需要人工调整成具有特定版面格式的报告文件。现有技术往往将结果数据保存到文本文件中,但文本文件无法指定具体的输出格式和字体效果。[2]因此,考虑在VC平台下开发程序调用事先编辑好样式的Microsoft Office Word(以下简称MS Word)报告,设计能在特定位置写入计算结果、插入统计表格和图片、可自动生成软件信息处理报告的VC程序,实现标准样式报告的自动生成。

为达到标准格式数据处理报告自动生成的目的,需要完成三个方面的工作。首先需设计用户期望的标准格式MS Word 报告模板;第二是配置VC开发平台下启动MS Word的开发环境;第三是掌握VC向MS Word文件中写入数据、表格、图形、图像的编程方法。下文将论述其中第二、三项工作的实现方法。

1 VC调用MS Word的开发环境配置方法

要想在VC程序中调用Microsoft Office,必须提前加入Office组件的对象类库,方可在后续程序中使用该类库中的诸多功能。其中,欲调用Office的Excel需要加入EXCEL9.OLB对象类型库,欲调用Office的PowerPoint需要加入MSPPT.OLB对象类型库,而调用Office的Word则需要加入MSWORD.OLB[2]对象类型库。

在一个欲调MS Word的MFC工程项目中,选择创建类向导选项,再打开界面右方出现的“Add Class/from a library”,在Microsoft Office的安装目录下(例如C:/Program Files/Microsoft Office/Office16)找到MSWORD.OLB类型库,在该类型库中选择需要调用的类名进行导入即可。在驱动MS Word生成报告的过程中,常用的类有Application、Document、Selection等。类导入完成后,VC系统会自动生成“msword.h”和“msword.cpp”文件。至此,后续VC程序即可调用导入类型库中的类,只要在.h或.cpp文件中添#include”msword.h”即可。[3]

导入MSWORD.OLB之后,为保证VC调用MS Word生成报告时的便捷性,可将某些类库中的基本类进行二次自定义封装,形成自定义类,减少后续使用时的重复编码,节约开发工作量。[4]例如将光标操作类和字符写入类相结合便可定义报告生成过程中的写数据类;光标操作类、表格创建类与字符写入类相结合便可定义报告生成过程中的创建表格并写入数据类。将类库中的基类根据编程需求进行二次定义、封装带来的好处十分明显,是面向对象程序开发理念的最好体现。

2 VC对MS Word文件的操作方法

在完成自定义类封装后,便可进入VC自动生成MS Word报告的程序设计阶段,下面将分别陈述VC创建MS Word文件的方法,以及VC对MS Word文件的数据写入、插入表格、插入图形或图像文件的编程方法。

首先,需要调用Office Word应用程序创建一个Word文档。下述语句为Word文档的建立方法,其中,Report为新创建的MS Word报告文件。

m_wdDocs.AttachDispatch(m_wdApp.GetDocuments())/*定義文档*/

Report=m_wdDocs.

Add(&Template,&NewTemplate,&DocumentType,&Visible)/*创建文档Report*/

文档建立后,如果要在文档的指定位置写入数据,可以使用下面语句。其中,szText变量中存有欲写入数据,通过该语句可将数据szText写入文档Report中。[5]

Selection::MoveDown(VARIANT*Unit,VARIANT*Count,VARIANT*Extend)/*光标移动*/

m_wdSel.TypeText(szText)/*写入数据*/

当VC应用程序产生统计结果后,我们可能希望在报告中插入包含统计数据的表格,这时需要先定义表格结构tbs,它拥有的行列数为nRow、nColumn,并按此定义生成该表格。[6]具体语句如下:

Tables tbs = m_wdDoc.GetTables()/*定义表格*/

tbs.Add(m_wdSel.GetRange(),nRow,nColumn,&vtDefault,&vtAuto)/*创建表格*/

随后,可用Cell语句定位欲操作表格的行、列位置,再用Select()选中定位的当前单元格,并向该单元插入数据szText。[7]具体编程语句如下:

Cell c = m_wdTb.Cell(nRow,nColumne)/*定位表格的行、列位置*/

c.Select()/*选中当前单元格*/

m_wdSel.TypeText(szText)/*将数据szText插入当前单元格*/

还可以根据需求向Word文件中插入JPG、BMP、PNG等多种文件格式的图像或图形,操作方法是先定位插入位置,之后通过函数image.AddPicture()插入图片,即:

InlineShapes image = m_wdSel.GetInlineShapes();/*定位当前位置*/

image.AddPicture(filePath,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(m_wdSel.GetRange()))/*插入图片*/

最后,以我们开发的“光伏阵列优化配置系统报告生成”功能为样例,阐述VC生成图1所示配置报告的编程方法。如图1所示,报告的题目、一级二级标题都已提前设置成了标准文本格式,[8]报告生成过程中,只需要根据每次光伏阵列优化方案的配置结果进行数据写入,例如,在2017年1月1日,对某地(纬度94.7N、经度40.1E、海拔高度1.14m)建设的光伏电站进行了仿真排布优化设计,形成的配置报告中需要在特定位置分别插入“建设地点经纬度、配置方案仿真设计时间、光伏阵列排布设备类型、设备结构示意图”等设计结果数据。为此,我们二次构造了写入固定文本、插入图片的自定义类

writeWord,而光标移动操作则通过系统类实现。

光伏阵列配置报告图

具体的编程思路是,①设置写入数据的字体、字号;②调用writeWord.WriteTitleFirst()语句写入固定样式的标题、说明性文本;③待插入配置参数可通过控制光标移动及系统方法m_wdSel.TypeTe xt(szText)写入报告的指定位置;④获取待插入图片路径后,使用insertImage函数即可插入配置图片。相应的VC语句如下:

this>SetFont("黑体",13);/*设置字体、字号*/

writeWord.WriteTitleFirst("1、建设地经纬度:\\n")/*写入固定文本*/

Selection::MoveDown(VARIANT*Unit,VARIANT*Count,VARIANT*Extend)/*光标移动*/

m_wdSel.TypeText(szText)/*数据szText写入指定位置*/

CString path = getCurrentPath()+\\\\..\\\\data_info\\\\

NSProImage.bmp/*获取需插入图片的路径*/

writeWord.insertImage(path)/*插入配置图片*/

3 结语

设计了一种VC平台驱动Microsoft Office Word,自动生成结构合理、图文并茂的标准化数据处理报告方法。应用此项技术,可实现应用软件系统数据记录及报告文档的自动化生成,有效减少系统用户的人工文档处理工作量。[9]借鉴文中介绍的相关技术,还有望实现Excel、PowerPoint等Microsoft Office系列文档的自动生成。

参考文献:

[1]张雪咏,马红涛,赵建峰.通过VC程序操纵Word的实现方法[J].电子技术与软件工程,2017(11):7981.

[2]卢耀华.基于Word自动化的学位论文写作辅助系统[D].北京理工大学,2011.

[3]陈特放,方斌.VC平台下基于OLE的Word自动化操作应用[J].计算机应用与软件,2009,26(09):123125.

[4]李素岐,邱崇涛,房江奇.Word技术在办公自动化中应用[J].科技展望,2016,26(03):34.

[5]刘安宇,刘德祥,郑立捷.基于VC++.NET的ADO数据库连接与Word表格自动生成[J].电脑知识与技术(学术交流),2007(02):316318.

[6]刘志江,罗欣,周博,陈思宇.VC++平台下基于OLE技术的Excel图表自动化输出[J].煤矿机械,2013,34(08):272275.

[7]王怒涛,李大凯,李丹,王超.VC++的Word文檔中的表与图自动生成技术[J].石油工业计算机应用,2015(02):2023+3.

[8]刘春雷,刘春雨.Word自动化合并邮件在VC中的实现与应用[J].信息技术,2004(08):7576+80.

[9]王永锋.VC++操作Word实现检测报告的自动化[A].中国金属学会.第195场中国工程科技论坛——中国科学仪器设备与试验技术发展高峰论坛(PFIT'2014)、第四届中国能力验证与标准样品论坛(4th RM & PT)、ICASI'2014 CCATM'2014国际冶金及材料分析测试学术报告会会议摘要[C].中国金属学会:,2014:1.