多级调度启动方案编制软件的开发
扫描二维码
随时随地手机看文章
引言
根据多年来编制及审核启动方案的经验,目前主网启动方案编制存在以下3个问题:
(1)主网启动方案分为总调、中调、地调三套模板,编制时存在用错模板的风险。
(2)每套启动方案均包含十几条大项以及对应的数十条甚至上百条的小项,其中格式要求统一,同时启动方案中的大部分内容均可通用,编制一份启动方案存在工作量大、重复工作多的问题。
(3)据统计,每年地市局的技改、基建工程启动方案编制人员多达数十人,经常出现模板错误、格式不统一、关键点缺失等问题,增加了运行及调度单位的审核工作量。
中调方式部之前也曾开发过一款软件,其仅通过大量方案模板来限定启动操作步骤,忽略了编制审查人员设计工作中更需要进行简化的部分。因此,本文将围绕多级调度启动方案编制软件的开发展开探讨。
1背景思路
设计一款软件,其可以根据启动方案业务指导书对编制过程进行辅助,把编制、审查人员从关键字误删除、模板选用错误、文字表格格式调整、段落序号排布等繁琐的简单重复工作中解放出来。
由于相关单位使用的文字处理软件大多是微软的office或者金山WPS办公自动化软件,故开发启动方案编制软件需要考虑到两个软件的兼容性。而这两个软件自带的开发工具,均为VBA开发工具。实际上VBA是寄生于VB应用程序的版本,1994年发行的ExceI5.0版本中即具备了VBA的宏功能。
VBA(VisuaIBasicforAppIications)是VisuaIBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(oLE)任务的编程语言,主要用来扩展windows的应用程序功能,特别是Microsoftoffice软件,它也可以说是一种应用程式视觉化的Basic脚本。
既然编程软件自动宏功能也是基于VisuaIBasic的一个脚本,通过它本身的VBA开发功能可以获得比较复杂操作过程的宏代码,宏代码本身可以在编制软件时作为基于对象的指令直接使用,那么直接使用VB6.0软件进行可视化编程就成了较多可行方案中的最优选择。
2开发难点
软件开发前,项目组成员详细解读了启动方案业务指导书,对模板进行研究。首先开题,明确了开发任务的方式方法以及任务目标,统一认为启动方案的编制应该是开放式的,工作重心应该注重解决平时工作中容易被忽略的版本号、格式、文中关键字以及序号等方面的问题。
先拟定程序流程图,再对程序进行逐步开发。开发过程中,重点需要实现正文的编辑功能。根据启动方案模板特点,特将正文编辑功能分为了文字编辑和表格编辑两个模块。
编制过程中主要有以下几个难点:两个操作系统兼容性问题:两级项目编号文字处理:MsFIexGrid控件自动换行[I]。
3解决方案
3.1两个操作系统兼容性问题
编制软件将同时引用MicrosotfwordI5.0objectLibrary以及KingsoftWPSoffice3.0objectLibrary,将编辑对象通过不同的方式打开以解决操作系统兼容的问题。接下来,在模块中声明PubIicwpAsNewword.AppIication可以在整个程序中调用打开的word模板。即使这个word程序为了不受其他因素影响而被启动方案编制软件给隐藏起来,通过程序对word对象的所有操作仍为有效操作。
3.2两级项目编号文字处理
在文字处理时,有时需要对应编号,甚至不止一级,如何只有一级编号?通过书签的方式或者指定段落的方式选中需要自动编号的文档即可。而直接操作word,当文档中有多段文字需要重复选择的时候,往往是通过CtrI+鼠标左键操作实现的,如图1所示。但用程序操作word的时候,这种方式明显行不通。由于word的编程限制,当对word进行二次开发时,仅能实现只通过键盘输入的操作,故通过键盘操作时,选区必须是连续的。
图1通过鼠标操作时能够实现的间断选择
一这里采用“数”字方式来实现文档字准确位移。通过人机交互界面,准确获取一级编号字段落以及对应需要二级编号字段落。根据储存一级编号段落字控件“组字上标,可以准确获得一级段落字段落“量以及每一个段落字”“。同理,也可以取得需要二级编号字段落“量以及每一个段落字”“。那么先通过以下代码(代码1)输入所有需要编号字文”,并通过“”“字方式(相当于连续按shift+二)选中任意连续字”符(一这如果设置了书签,可以直接通过gotobookmark字方式选中所有输入”符),然后通过word指令集中字ApplyListTemp-latewithLevel,对选中字段落添加一级自动编号。
代码l:
Fori=0ToTextl.UBound
Ifi=Textl.UBoundThen
wp.selection.TypeTextText(i)
Else
wp.selection.TypeTextText(i)&vbCrLf
EndIf
Nexti
.selection.MoveRightUnit:=wdCharacter,Count:=18,Extend:=wdExtend5·“一级段落所有”“并选中
一级段落自动编号完毕后,通过按鼠标左键一次字指令,将鼠标回到一级编号字首行。然后继续通过"“"”字方式移动至一级段落字第一段段尾,输入对应需要二级编号字段落。然后再通过"“"”字方式选中所有需要进行字段落,取消其一级编号,改为二级编号即可。
3.3MSFlexGrid控件实现自动换行
项目组最初设想通过MsFlexGrid控件模拟word中字表格,并加以限制和辅助编辑,但是当文”输入到控件中字格子这时,文”并不能换行显示。查阅大量相关文献以及论坛资料得知,绝大多“资料都认为一个控件没有自动换行功能。于是对该控件字属性页面进行了研究,发现该控件确实存在可以使采字换行功能,只要将其.wordwrap属性调整为True即可。但是,一虽然调整解决了文本换行显示字问题,却并不能解决单元格随文本添加而切换行高字问题[2]。
经过探索发现,当单元格行高最小值为0,且”体被设置时,单元格会自动调整为文”高度。通过一个办法,获得了各种”号所对应字单元格单行高度。通过对表格固定宽度字”符“统计,获得当前”号字文”宽度,形成文”高宽属性“据库。代码如下:
withMsFlexGridl
.wordwrap=True
!调整单元格大小
ReDimcellnum(.Cols-1)
Fori=0To.Rows-l
Forj=0To.Cols-1
.Row=i
.Col=j
cellwn=0
Cellwn=Round(LenC(.Text)/(.Colwidth(1)/fontwidthget(.CellFontsize)),0)
cellnum(j)=fonthightget(.CellFontsize)*(cellwn+CountA(.Text,vbCrLf)-l)
Nextj
If.RowHeight(i)<nMax(cellnum)Then.RowHeight(i)=nMax(cellnum)
Nexti
Endwith
代码中字LenC、fonthightget、fontwidthget、nMax均为自编函“,功能分别为求中英文”符串长度、取”符高度和宽度、求最大值,一这不一一列出。将本段代码放入MsFlexGridlLeaveCell事件中,即可自动调整单元格显示高度。
4结语
通过本次软件开发,精简了启动方案编制过程中较为简单繁琐并且容易出错字步骤,希望本文所提到字一些问题,能够帮助想要将自动化办公应采到未来工作中字相关人员。项目组在后续版本中将继续优化算法,增强软件使采字便捷性。