2023年11月30日发(作者:)
用Excel快速实现测井柱状图的绘制
李广超
(工程物探院)
[摘 要] 利用COM编程中的自动化技术,蚩?SPAN lang=EN-US>Excel文件,进行绘图,达到
快速制作油气和工程物探测井柱状图的目的,使用该方法充分利用Excel的强大功能,方便用户。
[关键词] 〖HTSS〗Excel COM 测井柱状剖面图
Excel是一个出色的电子表格软件,是迄今为止市场上功能最强的电子表格
软件,从大型的企业公司到个人家庭都是应用最广泛的,有良好的用户基础,具
有友好的界面,功能强大的数据计算能力和内部函数,还可以把数据以各种统计
图的形式形象的表示出来,进行数据分析。
Excel既是一个独立运行的程序,也是一个遵循COM(Commponent Object
Model组件对象模型)标准的服务器接口构件,COM是微软公司制定的构造二进制
兼容软件的规范,目的是让开发者和使用者脱离,这样用户可以使用COM构件随
意组装,利用它们实现自己的功能,完成软件开发工作,通过简单的编程达到专
业的效果。
石油测井或水利工程测井柱状剖面图,来表征和展示地下的各种地质信息。
柱状剖面图简称柱状图,以探测深度作为垂直坐标,地层、岩性、以及各种测井
曲线和解释成果用符号表示出来。
测井主要以各种岩石的物性差异为基础,通过相应的地球物理方法,连
续测定反映岩石物理性质的参数,并在分析这些物理参数沿井深剖面变化规律的
基础上,了解油气储集层的地下分布规律,评价油气储集层的生产能力以及解决
工程地质方面的问题。测井已经成为目前石油和工程地质上不可缺少的手段,对
测井资料利用的好坏程度将直接和间接地影响勘探成果的质量,而资料成图在利
用测井资料方面占着至关重要的角色。当前测井绘图方面的软件都有着不同程度
的不尽人意之处,结合工作实际,编制了该程序。
1 基本设计思想
将测井数据导入Excel,解释成果按照一定的格式输入。启动程序,打开数
据文件,程序提示你输入标题、比例、字体等,然后程序根据你选择的数据页面
控制Excel自动绘制图形,绘制结束后用户不满意的地方还可以Excel中再修改。
在绘制柱状图的岩性时,利用的是图库调入,节约了绘制符号的时间,提高了效
率,另外,用户还可以自己添加图库,以期能够更加完美地表达自己的意思,做
到“以人为本”的设计理念。
图1 基本流程
2 编程实现
在程序设计的时候,利用的编译环境是C++ Builder5.0,用到的技术是COM
编程中的Automation。在编程的时候,力求多做工作,就会很容易上手,用的
时候也会很轻松。
2.1 主要编程技术
在编程过程中,我选用引入类型库的方法,这样可以利用类型库查询服
务器对象(也即Excel)在C++外套包装下的说明,可以查询要用到的方法的参数
类型和返回值,这一点很重要。在调用中,采用了Interface智能接口的方法,
通过函数的调用,返回需要的对象,然后就可以采用伪指针的语法直接调用该对
象的方法。
2.2 启动Excel服务器
部分实现的代码,在打开文件时如下所示:
Excel_tlb :: TCOM_Application m_XLApp ; //定义Excel对象
Excel_tlb :: WorksheetPtr m_Workbook ;//定义worksheet对象
Excel_tlb :: WorkbookPtr m_Workbook ;//定义workbook对象
Void_fastcall TForm1:Button1Click(Toject *Sender)
{
if(OpenDialog1->Execute())
{
try
{
if (!m_XLApp) //判断Excel服务器是否打开
{
m_XLApp=CoApplication_::Create(); //没有打开,就创建Excel服务器
对象
m_XLApp->set_Visible(0, true); //使Excel显示运行
m_XLApp->Caption=WideString(OpenDialog1->FileName );//设置Excel
的标题
m_Workbook=m_XLApp->Workbooks->Add(WideString(OpenDialog1->Fil
eName));//打开选择的Excel文件薄
} // end if
else
{
m_XLApp->set_Visible(0, true);//如果服务器已经打开,就显示出来
m_XLApp->Caption=WideString(OpenDialog1->FileName );
m_Workbook=m_XLApp->Workbooks->Add(WideString( OpenDialog1->FileName)
);
}
}//end of try
catch(...)
{
ShowMessage(″Cant Open File!″);
}
}
上面这段程序比较简单易懂,也有比较清楚地注释,不用多做解释,其
功能就是在程序打开文件的菜单里,控制Excel的启动并打开了用户所选择的
Excel文件。这一步对程序来说却是很重要的,没有这些其他就无从谈起。
m_XLApp->Workbooks->Add(xlWBATWorksheet,0);
m_Worksheet=m_XLApp->Workbooks->get_Item(1)->Worksheet->get_Item(1);
m_Worksheet->Name=WideString(“我添加的页面");
for(int i=1;i<=20;i++)
{
m_Worksheet->Cells->set_Default(i,1,i*10);
m_Worksheet->Cells->set_Default(i,2,i*15);
}
m_SheetRange=m_Worksheet->get_Range(“C1:F10");
m_SheetRange->Formula=“RAND()";
上面的一段程序用于在Excel中添加一个工作表,然后将它赋给一个工
作表对象指针,将此工作表的名字改为“我的添加页面”;在循环里在工作表中
插入了40个数据,分别添加在工作单的第一、第二列的前二十个单元格中,最
后两句用0和1之间的随机数填充C1到F10之间的所有单元。这是向Excel单
元格中写入数据,那么同样的道理,在绘制图形的时候,就可以从其中读取数据,
绘制所需的图件了。
3 实例显示
下面给出该软件绘制的某钻孔石油综合测井地质剖面图的实例,只给出原图
的部分图件如图2所示。
图2 石油测井柱状图
下面的是水利工程综合测井柱状图,此图中曲线的数据是模拟的。
图3 工程测井柱状图
4 作用及意义
此程序主要应用自动控制技术,操纵Excel,从Excel中读取数据,并在其
中绘制图形,在编程中有一定难度,却实现了高速绘制图形,适用于原始和解释
的资料成图,提高了工作效率,为在综合测井图形的绘制方面提供了新的途径。
该程序针对的是笔者单位在水利工程综合测井成图的格式编写的,有一定的
局限性,改变绘制图形的框架结构,需要对程序作一点调整。


发布评论