多級(jí)調(diào)度啟動(dòng)方案編制軟件的開發(fā)
引言
根據(jù)多年來(lái)編制及審核啟動(dòng)方案的經(jīng)驗(yàn),目前主網(wǎng)啟動(dòng)方案編制存在以下3個(gè)問(wèn)題:
(1)主網(wǎng)啟動(dòng)方案分為總調(diào)、中調(diào)、地調(diào)三套模板,編制時(shí)存在用錯(cuò)模板的風(fēng)險(xiǎn)。
(2)每套啟動(dòng)方案均包含十幾條大項(xiàng)以及對(duì)應(yīng)的數(shù)十條甚至上百條的小項(xiàng),其中格式要求統(tǒng)一,同時(shí)啟動(dòng)方案中的大部分內(nèi)容均可通用,編制一份啟動(dòng)方案存在工作量大、重復(fù)工作多的問(wèn)題。
(3)據(jù)統(tǒng)計(jì),每年地市局的技改、基建工程啟動(dòng)方案編制人員多達(dá)數(shù)十人,經(jīng)常出現(xiàn)模板錯(cuò)誤、格式不統(tǒng)一、關(guān)鍵點(diǎn)缺失等問(wèn)題,增加了運(yùn)行及調(diào)度單位的審核工作量。
中調(diào)方式部之前也曾開發(fā)過(guò)一款軟件,其僅通過(guò)大量方案模板來(lái)限定啟動(dòng)操作步驟,忽略了編制審查人員設(shè)計(jì)工作中更需要進(jìn)行簡(jiǎn)化的部分。因此,本文將圍繞多級(jí)調(diào)度啟動(dòng)方案編制軟件的開發(fā)展開探討。
1背景思路
設(shè)計(jì)一款軟件,其可以根據(jù)啟動(dòng)方案業(yè)務(wù)指導(dǎo)書對(duì)編制過(guò)程進(jìn)行輔助,把編制、審查人員從關(guān)鍵字誤刪除、模板選用錯(cuò)誤、文字表格格式調(diào)整、段落序號(hào)排布等繁瑣的簡(jiǎn)單重復(fù)工作中解放出來(lái)。
由于相關(guān)單位使用的文字處理軟件大多是微軟的office或者金山WPS辦公自動(dòng)化軟件,故開發(fā)啟動(dòng)方案編制軟件需要考慮到兩個(gè)軟件的兼容性。而這兩個(gè)軟件自帶的開發(fā)工具,均為VBA開發(fā)工具。實(shí)際上VBA是寄生于VB應(yīng)用程序的版本,1994年發(fā)行的ExceI5.0版本中即具備了VBA的宏功能。
VBA(VisuaIBasicforAppIications)是VisuaIBasic的一種宏語(yǔ)言,是在其桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化(oLE)任務(wù)的編程語(yǔ)言,主要用來(lái)擴(kuò)展windows的應(yīng)用程序功能,特別是Microsoftoffice軟件,它也可以說(shuō)是一種應(yīng)用程式視覺(jué)化的Basic腳本。
既然編程軟件自動(dòng)宏功能也是基于VisuaIBasic的一個(gè)腳本,通過(guò)它本身的VBA開發(fā)功能可以獲得比較復(fù)雜操作過(guò)程的宏代碼,宏代碼本身可以在編制軟件時(shí)作為基于對(duì)象的指令直接使用,那么直接使用VB6.0軟件進(jìn)行可視化編程就成了較多可行方案中的最優(yōu)選擇。
2開發(fā)難點(diǎn)
軟件開發(fā)前,項(xiàng)目組成員詳細(xì)解讀了啟動(dòng)方案業(yè)務(wù)指導(dǎo)書,對(duì)模板進(jìn)行研究。首先開題,明確了開發(fā)任務(wù)的方式方法以及任務(wù)目標(biāo),統(tǒng)一認(rèn)為啟動(dòng)方案的編制應(yīng)該是開放式的,工作重心應(yīng)該注重解決平時(shí)工作中容易被忽略的版本號(hào)、格式、文中關(guān)鍵字以及序號(hào)等方面的問(wèn)題。
先擬定程序流程圖,再對(duì)程序進(jìn)行逐步開發(fā)。開發(fā)過(guò)程中,重點(diǎn)需要實(shí)現(xiàn)正文的編輯功能。根據(jù)啟動(dòng)方案模板特點(diǎn),特將正文編輯功能分為了文字編輯和表格編輯兩個(gè)模塊。
編制過(guò)程中主要有以下幾個(gè)難點(diǎn):兩個(gè)操作系統(tǒng)兼容性問(wèn)題:兩級(jí)項(xiàng)目編號(hào)文字處理:MsFIexGrid控件自動(dòng)換行[I]。
3解決方案
3.1兩個(gè)操作系統(tǒng)兼容性問(wèn)題
編制軟件將同時(shí)引用MicrosotfwordI5.0objectLibrary以及KingsoftWPSoffice3.0objectLibrary,將編輯對(duì)象通過(guò)不同的方式打開以解決操作系統(tǒng)兼容的問(wèn)題。接下來(lái),在模塊中聲明PubIicwpAsNewword.AppIication可以在整個(gè)程序中調(diào)用打開的word模板。即使這個(gè)word程序?yàn)榱瞬皇芷渌蛩赜绊懚粏?dòng)方案編制軟件給隱藏起來(lái),通過(guò)程序?qū)ord對(duì)象的所有操作仍為有效操作。
3.2兩級(jí)項(xiàng)目編號(hào)文字處理
在文字處理時(shí),有時(shí)需要對(duì)應(yīng)編號(hào),甚至不止一級(jí),如何只有一級(jí)編號(hào)?通過(guò)書簽的方式或者指定段落的方式選中需要自動(dòng)編號(hào)的文檔即可。而直接操作word,當(dāng)文檔中有多段文字需要重復(fù)選擇的時(shí)候,往往是通過(guò)CtrI+鼠標(biāo)左鍵操作實(shí)現(xiàn)的,如圖1所示。但用程序操作word的時(shí)候,這種方式明顯行不通。由于word的編程限制,當(dāng)對(duì)word進(jìn)行二次開發(fā)時(shí),僅能實(shí)現(xiàn)只通過(guò)鍵盤輸入的操作,故通過(guò)鍵盤操作時(shí),選區(qū)必須是連續(xù)的。
圖1通過(guò)鼠標(biāo)操作時(shí)能夠?qū)崿F(xiàn)的間斷選擇
一這里采用“數(shù)”字方式來(lái)實(shí)現(xiàn)文檔字準(zhǔn)確位移。通過(guò)人機(jī)交互界面,準(zhǔn)確獲取一級(jí)編號(hào)字段落以及對(duì)應(yīng)需要二級(jí)編號(hào)字段落。根據(jù)儲(chǔ)存一級(jí)編號(hào)段落字控件“組字上標(biāo),可以準(zhǔn)確獲得一級(jí)段落字段落“量以及每一個(gè)段落字”“。同理,也可以取得需要二級(jí)編號(hào)字段落“量以及每一個(gè)段落字”“。那么先通過(guò)以下代碼(代碼1)輸入所有需要編號(hào)字文”,并通過(guò)“”“字方式(相當(dāng)于連續(xù)按shift+二)選中任意連續(xù)字”符(一這如果設(shè)置了書簽,可以直接通過(guò)gotobookmark字方式選中所有輸入”符),然后通過(guò)word指令集中字ApplyListTemp-latewithLevel,對(duì)選中字段落添加一級(jí)自動(dòng)編號(hào)。
代碼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·“一級(jí)段落所有”“并選中
一級(jí)段落自動(dòng)編號(hào)完畢后,通過(guò)按鼠標(biāo)左鍵一次字指令,將鼠標(biāo)回到一級(jí)編號(hào)字首行。然后繼續(xù)通過(guò)"“"”字方式移動(dòng)至一級(jí)段落字第一段段尾,輸入對(duì)應(yīng)需要二級(jí)編號(hào)字段落。然后再通過(guò)"“"”字方式選中所有需要進(jìn)行字段落,取消其一級(jí)編號(hào),改為二級(jí)編號(hào)即可。
3.3MSFlexGrid控件實(shí)現(xiàn)自動(dòng)換行
項(xiàng)目組最初設(shè)想通過(guò)MsFlexGrid控件模擬word中字表格,并加以限制和輔助編輯,但是當(dāng)文”輸入到控件中字格子這時(shí),文”并不能換行顯示。查閱大量相關(guān)文獻(xiàn)以及論壇資料得知,絕大多“資料都認(rèn)為一個(gè)控件沒(méi)有自動(dòng)換行功能。于是對(duì)該控件字屬性頁(yè)面進(jìn)行了研究,發(fā)現(xiàn)該控件確實(shí)存在可以使采字換行功能,只要將其.wordwrap屬性調(diào)整為True即可。但是,一雖然調(diào)整解決了文本換行顯示字問(wèn)題,卻并不能解決單元格隨文本添加而切換行高字問(wèn)題[2]。
經(jīng)過(guò)探索發(fā)現(xiàn),當(dāng)單元格行高最小值為0,且”體被設(shè)置時(shí),單元格會(huì)自動(dòng)調(diào)整為文”高度。通過(guò)一個(gè)辦法,獲得了各種”號(hào)所對(duì)應(yīng)字單元格單行高度。通過(guò)對(duì)表格固定寬度字”符“統(tǒng)計(jì),獲得當(dāng)前”號(hào)字文”寬度,形成文”高寬屬性“據(jù)庫(kù)。代碼如下:
withMsFlexGridl
.wordwrap=True
!調(diào)整單元格大小
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均為自編函“,功能分別為求中英文”符串長(zhǎng)度、取”符高度和寬度、求最大值,一這不一一列出。將本段代碼放入MsFlexGridlLeaveCell事件中,即可自動(dòng)調(diào)整單元格顯示高度。
4結(jié)語(yǔ)
通過(guò)本次軟件開發(fā),精簡(jiǎn)了啟動(dòng)方案編制過(guò)程中較為簡(jiǎn)單繁瑣并且容易出錯(cuò)字步驟,希望本文所提到字一些問(wèn)題,能夠幫助想要將自動(dòng)化辦公應(yīng)采到未來(lái)工作中字相關(guān)人員。項(xiàng)目組在后續(xù)版本中將繼續(xù)優(yōu)化算法,增強(qiáng)軟件使采字便捷性。