基于VB的气田报表核查核算及数据整理
来源:用户上传
作者:王博学 王少奇 张建忠 张小凤
摘要:该文介绍了基于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, "年产气不匹配"
转载注明来源:https://www.xzbu.com/8/view-15425225.htm