APP下载

城轨列车模拟运行报告的自动生成研究

2013-11-26王永刚钱雪军叶华平

铁路计算机应用 2013年8期
关键词:城轨表格内存

王永刚,钱雪军,叶华平,姚 军

(1.同济大学 电气工程系,上海 200331;2.上海轨道交通培训中心,上海 201100)

城轨列车模拟运行报告是了解和改善列车运行性能的一个重要工具。报告涵盖列车模拟运行的各个方面,使工程人员能够获得更多的列车信息以便进行列车运行的优化。城轨列车模拟运行报告的内容包括3个方面:(1)文字:通过程序代码控制报告中文字的字体、颜色、大小以及对齐方式等;(2)图形:在城轨列车模拟运行期间会产生大量的图形且需要横向显示,这就涉及到图形的插入存储以及图形的横向设置;(3)表格:需要在报告中插入行驶数据的表格,这就涉及到表格插入、数据填充以及部分单元格合并。对城轨列车模拟运行报告自动生成进行研究,应确定报告格式,本软件采用Word报告的形式。

1 Word自动化对象

自动生成城轨列车模拟运行报告要先了解如何生成文档,Word中的每一个操作都是对其对象的操作。Word中包括很多对象,如文档、对话框、图表、文本框和图形等,而Word本身也是对象。这些对象都有自己的方法和属性。由于Word本身是一个实现自动化的COM组件,因此可以通过COM接口使用编程的方式来访问这些对象,改变它们的属性以完成对Word文档的自动化操作及一些特殊的应用,从而最终生成运行报告。需要用到的Word对象如表1所示。

表1 Word对象

2 自动生成报告的实现

有了上述了解,通过添加Word类型库,将表1中的全部对象添加至工程,并声明要用到的类对象,启动Word应用程序,新建一个空白的文档,就可以进行城轨列车模拟运行报告自动生成的实现了。

2.1 文字

在创建了新空白文档后,利用Word类对象进行编程,自动化控制Word的内容。本文以北京地铁8号线为例,首先在Word文本的第1行,用3号字、粗体、居中显示文本标题“北京地铁8号线下行性能计算”。实现方法是用Paragraphs类设置对齐方式,用Selection类加载文字内容,用Font类设置字体格式和大小,如:

strcpy_s(text, "北京地铁8号线下行性能计算");

paragraphs.SetAlignment(0);//设置文本格式左对齐

font=selection.GetFont();//Font的声明对象font.SetBold(true);//设置字体为粗体font.SetSize(16);//设置文字大小selection.SetFont(font);//应用格式

接下来的正文部分主要包括列车线路、运营路线、列车编组、车辆自重等,与上述方法基本相同,只需改变相应的参数即可。

2.2 图形

本文采用先将运行图保存为本地位图文件,然后再将本地位图文件插入到文档报告指定位置中的方法,实现了图形的插入。

2.2.1 保存为本地位图文件(.bmp)

位图文件由4个部分组成,分别是:文件头、信息头、色彩表和像素阵列,要将一个屏幕图形保存为位图文件,首先要获得它的如上信息,这一过程称为位图的“捕获”,实质上就是在内存中创建屏幕图像的一个副本。在这之前需要先获得内存的设备环境DC,然后把所有图形内容复制过来,从而实现位图的捕获。接下来将位图的信息写入,按照BMP文件格式要求将内存位图保存为本地位图文件。关键代码如下:

CDC MemoryDC;//定义内存DC

CBitmap bitmap;//定义位图对象

MemoryDC.CreateCompatibleDC(pDC);//创建与屏幕DC相兼容的内存DC

bitmap.CreateCompatibleBitmap(pDC,bmpWi dth,bmpHeight);//创建兼容的内存位图

MemoryDC.SelectObject(&bitmap);//将新建位图选入内存DC

MemoryDC.BitBlt(O,O,bmpWidth,bmpHidth,pDC,lUPOint.x,lUPOint.y,

SRCCOPY);//复制位图

2.2.2 插入本地位图文件

有了本地位图文件,只需创建一个嵌入式图片对象,将其插入到报告中指定位置即可。这里需要用到的类对象为Inlineshapes,关键代码如下:

CnlineShapes simbmp;//创建一个嵌入式图片对象

simbmp.AddPicture(pic,&LinkToFile,&Save WithDocument, &RangT); //加载图片到文档中。

2.2.3 图形设置为横向

通常城轨列车模拟运行图都是横向显示,而默认的Word页面设置为纵向,因此要将页面设置为横向。此处要用到的类对象为CpageSetup、Csections和Cscetion,通过分节符控制页面方向,关键代码如下:

CPageSetup PS;//定义对象进行页面设置

CSections sections;

CSection section;

COleVariant wdSectionBreak(short(2));

sel.InsertBreak(wdSectionBreak);//分节符,控制页面方向

sections = sel.get_Sections();

section =sections.get_Last();

PS=section.get_PageSetup();

PS.put_Orientation(1);//设置1为横向,为纵向

2.3 表格

城轨列车模拟运行报告中通常使用表格显示站间信息,包括发到站名称、站间距离、运行时间等。这些信息都是从数据库中取得的,每次选择的站点不同,相应的信息也随之变化。

首先插入一个新的空表格,通过调用Word类对象设置这个表格的基本属性,包括行数、列数等。

para = paras.Item();//获取表格所在段落

range = para.get_Range();

CTable0 tab = tabs.Add(range, row, col, &Ne wTemplate,&DocumentType);

添加完空表格之后,就可以从数据库中读取数填充表格了。填充表格需要用到的类对象是Cell和Range,关键代码如下:

CCell cell;//创建Cell对象

CRange range;

cell = ptable->Cell(1, i);//获取表格行第 i格

range = cell.get_Range();

range.InsertAfter(); //填写该列的名称

有的列车运行报告中还有可能要求表格中的单元格合并,关键代码如下:

CCells cells;

cell=tab.cell(2,1);//合并第1列中的第2行和第3行

cell.Merge(tab.cell(3,1));

至此,就完成了城轨列车模拟运行报告的自动生成,最后通过程序自动保存文档即可。在编程过程中有3点需要注意:

(1)表格一定要在文字和图片都插入完毕后才能插入,否则会引起排版混乱,在插入文字和图片的同时要预留出插入表格的段落。

(2)在页面横向或纵向设置发生变化时,要注意段落的变化,否则也会引起排版混乱。

(3)由于表格的插入,每一个单元格都是一段,所以原来的段落N会变为第(N+行数*(列数+1)-1)段。

3 运行结果

通过在Visual C++6.0和Office 2003、2007环境下运行软件,自动生成了城轨列车模拟运行报告,且文字、图片、表格排版正常,存储路径正常,界面如图1所示。

图1 城轨列车模拟运行报告界面图

4 结束语

本文介绍了在Visual c++环境中调用Word自动生成城轨列车模拟运行报告的实现方法,在实际应用中可以极大地提高工作效率。

[1]张 南,李玉山.用vc控制word生成仿真报告[J]. 电脑编程技巧与维护,2011(7).

[2]黄智敏,孙建雄,李建羽.城规列车运行仿真算法研究[J].电力机车与城轨车辆,2007,30 (3).

[3]姜照林.用vc实现word文档自动化[J].嘉兴学院学报,2007,19(3).

猜你喜欢

城轨表格内存
《现代临床医学》来稿表格要求
城轨CBTC系统改进方案的分析探讨
统计表格的要求
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
城轨跨站开通时软件贯通方案设计
城轨屏蔽门控制传输技术的设计与实现
履历表格这样填
基于可靠性的城轨车辆维修模式及应用
内存搭配DDR4、DDR3L还是DDR3?