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