王博學 王少奇 張建忠 張小鳳








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