王博學(xué) 王少奇 張建忠 張小鳳
摘要:該文介紹了基于Visual Basic語言程序開發(fā),該程序從氣田工區(qū)數(shù)據(jù)核算、氣井單井?dāng)?shù)據(jù)核查、不同時期報表數(shù)據(jù)核算對比入手,實現(xiàn)問題輸出、相關(guān)數(shù)據(jù)整理。該程序高效核查核算數(shù)據(jù),有效減少異常數(shù)據(jù)、錯誤數(shù)據(jù)傳播帶來的危害,為后續(xù)氣田開發(fā)分析提供更高質(zhì)量的數(shù)據(jù)。
關(guān)鍵詞:Visual Basic編程;數(shù)據(jù)核算核查;氣田報表
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)36-0100-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 背景
油氣田開發(fā)生產(chǎn)過程中產(chǎn)生很多報表,各類報表數(shù)據(jù)需要檢查審核,由于數(shù)據(jù)量大,人工檢查審核耗時、煩瑣,甚至需要多人的合作才能完成。鑒于此,借助于計算機的強大數(shù)據(jù)處理功能,來處理重復(fù)煩瑣耗時的數(shù)據(jù)檢查審核、整理工作,具有相當(dāng)大的優(yōu)勢。為此基于Visual Basic(VB)語言編制、生成了針對本單位氣田采氣日報檢查、整理的應(yīng)用程序,實現(xiàn)數(shù)據(jù)對比、報告生成、數(shù)據(jù)簡單匯總整理的功能。采氣日報表樣表如圖1。
Visual Basic語言在程序編寫方面具有較為廣泛的應(yīng)用,其具有可視化集成開發(fā)環(huán)境、以事件驅(qū)動、用戶界面圖形化等特點,在設(shè)計實現(xiàn)中小型系統(tǒng)方面有著特有的優(yōu)勢[1-3]。RojasSola José Ignacio等人[4]將Visual Basic結(jié)合CATIA軟件實現(xiàn)產(chǎn)品設(shè)計制造,Arun Datta[5]將Visual Basic應(yīng)用在工藝工程設(shè)計中,陳麗秀[6]將其應(yīng)用在實驗數(shù)據(jù)處理中,Yong Wang等人[7]將VISUALBASIC與FORTRAN混合語言編程在水文氣象模型可視化技術(shù)中應(yīng)用。基于 Visual Basic(VB)發(fā)展而來的VBA,內(nèi)嵌于Office 辦公軟件,為辦公帶來了許多便利[8-9]。
2 程序功能需求
通過VB語言編寫程序,主要實現(xiàn)以下五個功能:
1) 工區(qū)產(chǎn)氣數(shù)據(jù)、產(chǎn)水?dāng)?shù)據(jù)、壓力數(shù)據(jù)等的核算及問題輸出;
2) 氣井單井產(chǎn)氣數(shù)據(jù)、產(chǎn)水?dāng)?shù)據(jù)、壓力數(shù)據(jù)、溫度數(shù)據(jù)等的核查及問題輸出,如,核查誤填數(shù)值、異常數(shù)值;
3) 氣井狀態(tài)核查及問題輸出;
4) 前日、當(dāng)日日報表中數(shù)據(jù)對比、核算及問題輸出;
5) 對復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行重構(gòu),實現(xiàn)數(shù)據(jù)整理。如,將圖1中的數(shù)據(jù)提取整理成圖2所示格式的數(shù)據(jù)。根據(jù)圖2中的數(shù)據(jù)便很容易在Excel中繪制單井生產(chǎn)動態(tài)曲線,如圖3。
需要說明的是,核查是指核對兩個數(shù)據(jù)是否一致,核對數(shù)據(jù)與正確數(shù)據(jù)的一致性。主要對溫度、壓力、產(chǎn)氣、產(chǎn)水、注醇數(shù)據(jù)進(jìn)行核查,實現(xiàn)對異常數(shù)據(jù)、非正常數(shù)值字符進(jìn)行篩選,并按要求輸出。
核算是指重新計算并判斷計算結(jié)果與報表給出的數(shù)值是否一致。主要對井區(qū)平均溫度、平均壓力數(shù)據(jù)及井區(qū)累產(chǎn)氣、累產(chǎn)水、累注醇數(shù)據(jù)進(jìn)行重新計算。計算結(jié)果與報表中給出的數(shù)值進(jìn)行對比,若兩個數(shù)值不一致則數(shù)據(jù)“異?!被颉安灰恢隆保匆筝敵?。
3 功能實現(xiàn)
3.1 設(shè)計思路
報表核查核算及數(shù)據(jù)整理主要包括:數(shù)據(jù)調(diào)入、數(shù)據(jù)核查核算、結(jié)果輸出、數(shù)據(jù)整理。首先實現(xiàn)數(shù)據(jù)調(diào)入,然后通過計算機分別對單井、井區(qū)相關(guān)數(shù)據(jù)進(jìn)行核查核算并輸出結(jié)果形成報告。最后,對相關(guān)數(shù)據(jù)進(jìn)行提取整理。設(shè)計思路圖見圖4。
3.2 程序介紹
本文介紹部分關(guān)鍵程序。點選調(diào)入數(shù)據(jù)文件程序、數(shù)據(jù)核算核查程序、檢查結(jié)果輸出程序、數(shù)據(jù)整理程序等四部分程序介紹如下:
1)點選調(diào)入數(shù)據(jù)文件程序
...
CommonDialog1.Filter = "所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
strPath = CommonDialog1.FileName
...
通過通用對話框點選需要檢查的日報表,并加載到檢查程序,然后開展后續(xù)操作。
2)數(shù)據(jù)核算對比、核查(以產(chǎn)氣數(shù)據(jù)為例)程序
①氣井單井?dāng)?shù)據(jù)核查
...
If Cells(i, 6).Value = "" Then Else If Cells(i, 6).Value > 30 Then Print #1, Cells(i, 2).Value; Tab(40); "套壓大于30MPa";
If Cells(i, 10).Value = "" Then Else If Cells(i, 10).Value > 150000 Then Print #1, Cells(i, 2).Value; Tab(40); "日產(chǎn)氣大于15萬立方米";
...
其中,變量i為for語句中進(jìn)行循環(huán)計數(shù)的循環(huán)變量, Cells(i, 6)、 Cells(i, 10)分別為報表中給出的單井套壓、日產(chǎn)氣數(shù)據(jù),Cells(i, 2)為單井井號所在單元格。若套壓大于30MPa,輸出井號和壓力數(shù)值到輸出文件中;若日產(chǎn)氣大于15萬立方米,輸出井號和壓力數(shù)值到輸出文件中。
②工區(qū)產(chǎn)氣數(shù)據(jù)核算對比
...
If Abs(Cells(ii + 2, 5).Value - Qgr) < 0.01 Then Else Print #1, "日產(chǎn)氣不匹配"
If Abs(Cells(ii + 2, 6).Value - Qgy) < 0.01 Then Else Print #1, "月產(chǎn)氣不匹配"
If Abs(Cells(ii + 2, 7).Value - Qgn) < 0.01 Then Else Print #1, "年產(chǎn)氣不匹配"
...
其中,變量ii為for語句中進(jìn)行循環(huán)計數(shù)的循環(huán)變量,變量Qgr、Qgy、Qgn分別為程序核算的工區(qū)日產(chǎn)氣、月產(chǎn)氣、年產(chǎn)氣,Cells(ii + 2, 5)、Cells(ii + 2, 6)、(Cells(ii + 2, 7)分別為報表中給出的日產(chǎn)氣、月產(chǎn)氣、年產(chǎn)氣所在單元格。核算的數(shù)據(jù)與報表給出數(shù)據(jù)進(jìn)行對比,如果兩個數(shù)據(jù)超出誤差范圍,便在輸出報告中寫入"月產(chǎn)氣不匹配"。
③工區(qū)前日、當(dāng)日數(shù)據(jù)對比
...
Write #1, "工區(qū)月累產(chǎn)氣核查對比:當(dāng)日累產(chǎn)氣-前日累產(chǎn)氣-當(dāng)日產(chǎn)氣:" & Worksheets(M).Cells(ii + 2, 6).Value - Worksheets(M - 1).Cells(ii + 2, 6).Value - Worksheets(M).Cells(ii + 2, 5).Value
...
其中,Cells(ii + 2, 6)、Cells(ii + 2, 5)分別為報表中給出的工區(qū)月累產(chǎn)氣數(shù)據(jù)、工區(qū)日產(chǎn)氣數(shù)據(jù),M為按照日期排列的表單總數(shù)。當(dāng)日累產(chǎn)氣數(shù)據(jù)與前日累產(chǎn)氣數(shù)據(jù)對比,如果當(dāng)日累產(chǎn)氣數(shù)據(jù)與前日累產(chǎn)氣數(shù)據(jù)之差等于今日產(chǎn)氣數(shù)據(jù),則說明數(shù)據(jù)計算正確。
3)輸出報告程序
數(shù)據(jù)對比后,需要將對比結(jié)果按順序輸出形成報告。首先,通過程序Open "C:\RESULT.txt" For Append As #1在電腦C盤下的虛擬存儲文件夾建立txt文件。然后,通過Print函數(shù)或者Write函數(shù)將數(shù)據(jù)核算對比、核查程序運行結(jié)果寫入“RESULT.txt”文件,形成報告。
例如:
If Abs(Cells(ii + 2, 6).Value - Qgy) < 0.01 Then Else Print #1, "月產(chǎn)氣不匹配"
該語句將程序核算的月產(chǎn)氣量與報表給出的月產(chǎn)氣量進(jìn)行對比,如果兩個數(shù)據(jù)超出誤差范圍,便在輸出報告中寫入"月產(chǎn)氣不匹配"。
If Cells(i, 13).Value = "" Then Else If Cells(i, 13).Value > 50 Then Print #1, Cells(i, 2).Value; Tab(40); "日產(chǎn)水大于50立方米"
該語句將核查單井的日產(chǎn)水量,如果日產(chǎn)水量數(shù)據(jù)超出50立方米,便在輸出報告中寫入井號及"日產(chǎn)水大于50立方米"。
4)數(shù)據(jù)整理
通過將需要的數(shù)據(jù)從日報表中提取到新建表單,并按照一定格式、計量單位進(jìn)行排列、換算,實現(xiàn)數(shù)據(jù)整理,此過程應(yīng)用賦值運算符“=”。
3.3 可視界面制作
可視化操作界面有利于操作、人機互動。利用VB語言面向?qū)ο?、可視化的特點制作如下界面:
1)文件點選界面。通過文件選擇框點選文件,避免直接向程序段寫入文件名稱、路徑,如圖5。
界面制作過程中用到commondialog控件、command控件,其中,command控件,賦值為“點擊,選擇文件,并開始檢查”??丶荲isualBasic中預(yù)定義的對象,是由系統(tǒng)設(shè)計好提供給用戶使用的對象[10],方便編程使用。
2)信息輸出界面。通過MsgBox 提示輸出文件存儲路徑 “C:/用戶/.../AppData/Local/VirtualStore/RESULT”,方便查找輸出文件,如圖6。通過MsgBox在程序末尾彈出“檢查結(jié)束”,如圖7,提示檢查程序運行結(jié)束。
3.4 運行結(jié)果輸出
運行程序后生成的輸出結(jié)果示例如圖8:
運行結(jié)果給出了異常數(shù)值、錯誤數(shù)值及部分?jǐn)?shù)據(jù)的對比結(jié)果,為后續(xù)數(shù)據(jù)分析提供了更高質(zhì)量、更為可靠的數(shù)據(jù)。
4 結(jié)束語
本文介紹了基于VB編寫的程序在氣田生產(chǎn)數(shù)據(jù)檢查及數(shù)據(jù)整理的應(yīng)用。所編寫的程序能夠?qū)蟊頂?shù)據(jù)進(jìn)行核查、核算,有效提高報表審核效率,簡單明了地處理相關(guān)復(fù)雜煩瑣的工作。在實際應(yīng)用工作中可以根據(jù)需要擴充程序,使程序功能更加豐富,報表檢查更加細(xì)致、高效。
參考文獻(xiàn):
[1] 高春艷,李賀.Visual Basic 項目開發(fā)全程實錄[M].北京:清華大學(xué)出版社,2013.
[2] 海濱,關(guān)媛.Visual Basic 程序設(shè)計教程[M].南京:南京大學(xué)出版社,2014.
[3] 馬赫,馮思度,張紅偉.學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2019,15(6):61-62.
[4] Rojas-Sola J I,del Río-Cidoncha G,Ortíz-Marín R,et al.Design and development of sheet-metal elbows using programming with visual basic for applications in CATIA[J].Symmetry,2020,13(1):33.
[5] Datta A.Process engineering and design using visual basic[M].Boca Raton:CRC Press,2013.
[6] 陳立秀.基于Visual Basic的試驗數(shù)據(jù)處理[J].山東工業(yè)技術(shù),2017(13):17.
[7] Wang Y,Ding Y Y,Shi L.Application of visual basic and FORTRAN mixed-language programming to visualization technology for hydro-meteorological model[J].Applied Mechanics and Materials,2012,263/264/265/266:1352-1355.
[8] 李小遐.Excel VBA在辦公自動化中的應(yīng)用[J].電子測試,2014(22):105-106,95.
[9] 王淏,亢娟娜.Excel VBA在測評成績計算中的應(yīng)用[J].辦公自動化,2021,26(2):63-64,26.
[10] 劉炳文.Visual Basic 程序設(shè)計教程[M].4版.北京:清華大學(xué)出版社,2009:13.
【通聯(lián)編輯:謝媛媛】