APP下载

基于VB的气田报表核查核算及数据整理

2021-03-07王博学王少奇张建忠张小凤

电脑知识与技术 2021年36期

王博学 王少奇 张建忠 张小凤

摘要:该文介绍了基于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.

【通联编辑:谢媛媛】