周志 趙希磊 樊冬 朱厚林 劉浩
摘要:地震臺站值班人員在日常工作中,需要填寫多種儀器的運行觀測日志和值班日志,在手工填寫時,普遍存在過程煩瑣、信息易錯漏等問題,為解決這類問題,使用Excel VBA編寫了觀測日志自動生成程序,并應(yīng)用于日常工作中,實際應(yīng)用表明,該程序?qū)崿F(xiàn)了觀測日志的批量化、自動化、標準化產(chǎn)出,減輕了值班人員負擔(dān),提高了日常工作效率。
關(guān)鍵詞:Excel VBA;觀測日志;自動生成
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2020)33-0224-03
開放科學(xué)(資源服務(wù))標識碼(OSID):
1 背景
在佛子嶺地震臺,值班人員每日都需要填寫前一日5套地震監(jiān)測儀器(BBVS-60地震儀、VP寬頻帶傾斜儀、vs垂直擺傾斜儀、RTP氣象三要素儀、GS2000電磁擾動儀)運行日志和值班工作日志(WORD格式,下簡稱日志)。慣例上,值班人員需要在各日志模板上填寫前一日相關(guān)信息和儀器監(jiān)測數(shù)據(jù)圖件,并保存為帶時間標記的日志文件。這一過程的突出問題表現(xiàn)為填寫煩瑣、易錯漏信息、工作效率低等。若能夠開發(fā)一款日志自動生成程序,實現(xiàn)日志產(chǎn)出自動化、批量化、標準化,則可使日志產(chǎn)出過程更加便捷高效,減輕值班人員的負擔(dān),同時增強產(chǎn)出日志的規(guī)范、統(tǒng)一性,具有一定的現(xiàn)實意義。
2 程序分析
雖然許多程序語言(VB、C語言、JAVA等)都可實現(xiàn)日志文件的自動生成,但是由于要生成的日志文件格式是WORD格式,所以我們使用MS Office自帶的VBA語言進行二次開發(fā),可以實現(xiàn)程序開發(fā)更簡單便捷,開發(fā)出來的程序適用性更好(免安裝、分享性、移植性強、操作簡單,使用方便)[1]。
Visual Basic for Applications,簡稱VBA,是Visual Basic的一種宏語言,是微軟公司開發(fā)出來在其桌面應(yīng)用程序(如MSOffice)中執(zhí)行通用的自動化(OLE)任務(wù)的編程語言。在MS Of-fice中,VBA具有強大的對象控制能力,功能的擴展及定制能力,MS Office中的絕大多數(shù)手工操作,都可以用簡單的VBA程序自動完成,多應(yīng)用于處理Excel數(shù)據(jù)、修改表格格式、批量排版Word/PPT文件、關(guān)鍵信息排查、實現(xiàn)自動批量打印,甚至抓取網(wǎng)頁數(shù)據(jù)、對接外部數(shù)據(jù)庫、調(diào)用Windows系統(tǒng)功能等[2-4]。
3 程序設(shè)計
3.1 設(shè)計思路
我們將程序編寫分為兩個部分:第一部分是軟件界面布局的設(shè)計,第二部分是代碼的編寫。從數(shù)據(jù)流的角度考慮,可以將程序分為三個部分:第一部分是日志關(guān)鍵信息的輸入;第二部分是數(shù)據(jù)的處理;第三部分是日志文件的自動生成。
程序流程大致如下(流程圖見圖1):在指定目錄存放日志模板,并將模板中相關(guān)信息標記為特殊字符串,在日志生成之前,在EXCEL工作表中錄入相關(guān)信息,在指定目錄存放指定文件名的JPG格式圖片,點擊“自動生成觀測日志”按鈕后,程序自動將模板文件的特殊字符串和圖片替換為剛錄入的信息和剛存放的圖片,并將生成的日志自動按固定名稱格式存放在指定目錄,并提示日志已自動生成。
3.2 程序輸入界面的設(shè)置
以VP傾斜儀運行日志為例,其他日志同理。首先創(chuàng)建一個EXCEL文件,將表sheetl重命名為日志自動生成,使用分組框和命令按鈕,設(shè)計程序輸入界面(圖2)。輸入的信息包含日期、星期、天氣、值班員、復(fù)核員、系統(tǒng)狀況、環(huán)境狀況、數(shù)據(jù)概況、報送情況、干擾情況、其他等,部分信息輸入使用下拉菜單選擇輸入,以減少錯漏。將命令按鈕重命名為“自動生成儀器運行日志”,雙擊“自動生成儀器運行日志”按鈕,輸入程序代碼。待代碼輸入完成后,點擊“自動生成儀器運行日志”按鈕,即可自動在指定目錄產(chǎn)出日志。
在EXCEL文件所在目錄,建立三個目錄,分別是./outdoc/,輸出庫,存放自動生成的日志文件;./temdoc/,模板庫,存放日志模板,模板中相關(guān)信息使用特殊字符串表示,并與EXCEL文件中輸入的信息一一對應(yīng),如{officer)表示值班員名稱、(weath-er}表示天氣信息,等等;./picdir/,圖片庫,存放需要插入模板的圖片文件,圖片命名需要規(guī)范,如vp.jpg表示VP傾斜儀前一日的數(shù)據(jù)曲線圖,等等。
3.3 指定字符串的更換
當(dāng)在EXCEL表中輸入信息完成后,使用VBA中wapp.Doc-uments.Open、.Find.Execute FindText等命令對模板文件進行打開、查找并替換字符串的操作,從而達到日志信息輸入的效果。代碼如下:
Dim temdocpath, picdirpath, outdocpath, wapp, myrange,vpmbdoc,vpdoc '定義參數(shù)
temdocpath=ThisWorkbook.Path&”\temdoc\” 模板庫路徑
picdirpath= ThisWorkbook.Path&”\picdir\" '圖片庫路徑
outdocpath= ThisWorkbook.Path&”\outdoc\”'輸出庫路徑
vpmbdoc= Dir(temdocpath&”WP運行日志.docx”)'VP模板文件路徑
If vpmbdoc<>””Then '如果模板文件存在
Set wapp= CreateObject(”word.application”)
Set vpdoc= wapp. Documents.Open(temdocpath&vpmbdoc)'打開VP模板文件
wapp.Visible= False 'WORD文件不可見
Set myrange= wapp.ActiveDocument.Content '設(shè)置要查找、替換的范圍
myrange. Find. Execute FindText:=”{officern Forward: =ture,Replacewith:=Sheetl. Cells(5,9),Replace:=wdReplaceAIl '將模板內(nèi)所有字符串{offcer)替換為15單元格內(nèi)容
myrange.Find.Execute FindText:=”(weather}", Forward:=ture,Replacewith:=Sheetl.Cells(5,7),Replace:=wdReplaceAII '將模板內(nèi)所有字符串{weather)替換為G5單元格內(nèi)容
3.4 指定圖片的更換
當(dāng)日志信息輸入完成后,使用VBA中.InlineShapes()、.In-lineShapes.AddPicture等命令對模板文件中圖片進行查找、替換為指定圖片的操作,從而達到日志圖片輸入的效果。代碼如下:
Set picl= vpdoc.InlineShapes(l)找到模板文件中第1張圖片
Set rngpicl=vpdoc. Range(Start: =picl. Range. Start, End:=picl.Range.End)'獲取第1張圖片的位置
picI.Delete '刪除第1張圖片
vpdoc.InlineShapes.AddPicture picdirpath&”\vp.jpg”, linkto-file:=False, savewithdocument:=True,
Range:=mgpicl '在第1張圖片位置插入圖片庫中vp.JP9圖片
Set pic2 =vpdoc.InlineShapes(2)'找到模板文件中第2張圖片
Set rngpic2=gsdoc. Range(Start: =pic2. Range. Start, End:=pic2.Range.End)'獲取第2張圖片的位置
pic2.Delete '刪除第2張圖片
gsdoc.InlineShapes.AddPicture picdirpath&”\qx.j pg', linkto-file:=False, savewithdocument:=True,
Range: =mgpic2 '在第2張圖片位置插入圖片庫中qx.jpg圖片
3.5 生成的日志文件自動存儲
當(dāng)日志信息和圖片輸入完成后,使用VBA中wapp.ActiveD-ocument.SaveAs、MsgBox等命令將生成的日志另存為固定格式文件名的日志文件,并提示日志已產(chǎn)出。代碼如下:
wapp.ActiveDocument.SaveAs outdocpath&”VP傾斜儀運行日志”& Sheetl.Cells(5,2)&SheetI.Cells(5,3)&SheetI.Cells(5,4)'將生成的日志以固定格式的名稱存放到輸出庫
vpdoc.Close '關(guān)閉模板
Set vpdoc= Nothing
wapp.Quit '退出WORD
MsgBox”VP傾斜儀運行日志已生成”'提示日志已產(chǎn)出
4 程序運行效果
利用模板(圖3),通過以上方法,程序自動生成的儀器運行日志(圖4)??梢钥吹?,自動生成的日志格式規(guī)范、信息準確、方便快捷。其次,使用相同的方法,可以同時實現(xiàn)其他型號儀器運行日志和值班日志的自動化、批量化、標準化產(chǎn)出,可以大大減少人工打開、修改、保存文件操作,從而減少人工操作失誤。目前,該程序已在我臺正常穩(wěn)定運行,達到了預(yù)期的設(shè)計要求,滿足了日常工作的需要,也可在其他類型日志產(chǎn)出工作中推廣和使用。
5 結(jié)束語
本文主要介紹了利用EXCEL VBA實現(xiàn)觀測日志自動生成,解決了一直以來手動填寫觀測日志的各種弊端,有效實現(xiàn)了日志產(chǎn)出過程的簡便化、規(guī)范化、自動化和批量化,減少重復(fù)操作和失誤,降低工作強度,提高工作效率。而且VBA編程語言嵌入在MS Office 2000軟件以上各個版本中,編寫的VBA程序之間相互兼容,推廣適用性較好。同時可根據(jù)實際需要,將結(jié)構(gòu)化的信息存人Access數(shù)據(jù)庫,以備查詢。
參考文獻:
[1]羅剛君.Excel VBA程序開發(fā)自學(xué)寶典[M].北京:電子工業(yè)出版社,2009.
[2]馮桂爾.基于Excel VBA的測試系統(tǒng)模板制作和成績統(tǒng)計分析[J].電腦知識與技術(shù),2014,10(34):8146-8147.
[3]崔子健.基于Excel VBA的考勤表自動生成程序[J],電腦知識與技術(shù),2019,15(8):40-41,53.
[4]齊麗莉.VBA在成績管理中的應(yīng)用與設(shè)計[J].電子技術(shù)與軟件工程,2019(1):158-159.
【通聯(lián)編輯:謝媛媛】
作者簡介:周志(1986-),男,安徽樅陽人,工程師,學(xué)士,研究方向為地震監(jiān)測預(yù)報。