海量數據處理是石油地質項目開展過程中的重要工作,若依靠純手工處理工作量巨大。文章提出了基于VBA數據批量處理方法,以氣藏數值模擬工藝改造數據的處理為例,在EXCEL中運用VBA進行編程,實現海量射孔數據的提取與標準化處理。首先從井史數據出發,借助文件對象打開對應井單的射孔數據文件,然后循環提取射孔數據中的相關數據信息,進行標準化處理后寫入工藝改造數據表格中,生成氣藏數值模擬的基礎數據體。針對示范工區數據處理表明,該方法不但極大地提高了氣藏數值模擬基礎數據的整理效率,同時也能克服人工處理因疲勞導致的錯誤,提高了數據處理的質量。
《貴州地質》是本刊1984創刊,國內外公開發行,季刊。貴州省地質礦產勘查開發局主管,貴州省地質調查院主辦的公開發行的科技季刊。其主要任務是:反映我省地學進展和科研成果,介紹國內外地學發展動態,報道地學界重大事件,為我省的社會經濟發展普及地學知識,為我省的地學發展培育人才。
0 引言
雖然Excel功能強大且提供了豐富的函數輔助數據處理,但仍然不能滿足一些特殊數據的處理要求。為了處理一些模型更為復雜的數據,我們可以利用Excel自帶的開發環境VBA實現數據處理在某些方面的特殊要求[1-2]。例如:Dydowicz, P.基于VBA對海量公司數據進行了批量格式轉換[3]。DJ Zhang利用Excel VBA進行本地奇點分析批量運算[4]。在Excel中,處理少量數據的時候可以人工操作處理,當數據處理需要不斷重復相同的操作時,可以用Excel中的錄制宏來操作,而當我們處理繁瑣并且重復量很大的數據時,VBA的編寫就可以幫助減少大量重復的工作。VBA屬于面向對象的編程語言,具有易理解、語法簡單的特點,加之,VBA是針對某個特定程序開發,利用簡單的代碼即可完成復雜的功能[5-6]。VBA處理數據比其他語言處理數據需要編寫的代碼量少,簡單易操作,不僅能提高效率節省時間,還能大大提高數據正確率。本文針對VBA在油氣勘探開發中海量數據處理的應用開展了研究,運用其實現了高效地數據整理與標準化工作。
1 工作流程
基于VBA的海量數據批量處理會涉及多個射孔數據表與一個井單表,射孔數據表存放于一個單獨的射孔數據文件夾中,首先通過循環一個工作簿中“井號”表單中的井名,依次在射孔數據文件夾中查找對應井號的工作簿,并依次將其打開,然后逐個復制其中關鍵信息,粘貼到首次打開的工作簿中的“工藝改造數據”表單中指定的位置,經過整理,生成氣藏數值模擬的基礎數據體。
2 實現方法
2.1 文件的讀取
2.1.1 使用FSO對象
讀取射孔數據文件夾需要創建一個FSO對象,它不僅可以實現文件的創建、改變、移動和刪除,而且可以檢測是否存在指定的文件夾。此外,FSO 對象模型還可以獲取關于文件和文件夾的信息,如名稱、創建日期或修改日期等以及系統中使用的驅動器的信息。FileSystemObject是FSO對象模型中最主要對象,它提供了一套完整的可用于創建、刪除文件和文件夾,收集驅動器、文件夾、文件相關信息的方法。
創建FSO對象的關鍵代碼:
Set objFileSystem=CreateObject("Scripting
.FileSystemObject")
2.1.2 獲取文件路徑
每口井的射孔數據都存放在同一個文件夾中,而數據的處理需要先獲取這個文件夾的路徑。
獲取文件夾路徑的關鍵代碼:
strPath=ActiveWorkbook.Path+"\射孔數據\"
2.2 設置輸出表頭
工作簿中的“工藝改造數據”表中有相應的表頭,在指定的位置寫入對應的表頭,同時,對存放數據的區域單元格進行格式設置。
2.2.1 寫入表頭
在該工作簿中的“工藝改造數據”表單中寫入表頭,需要用到Excel中的Range對象,它代表Excel中的單元格,可以是單個單元格,也可以是單元格區域。通過VBA中的Range屬性,依次將表頭數據寫入到指定的單元格中。
寫入表頭關鍵代碼,以A列為例:
Range("A1")="DATE(dd.mm.yyyy)"
2.2.2 設置格式
利用Columns屬性中的NumberFormatLocal屬性,以用戶語言字符串設置對象的格式代碼,將指定區域的單元格格式設置為文本格式。
設置格式關鍵代碼,以A列為例:
Columns("A").NumberFormatLocal="@"
2.3 數據批量提取與處理
2.3.1 打開井號對應的射孔數據
⑴ 計算“井號”表單中井口的數量,首先定義一個wellCount接收“井號”表單中的井口數量,Range對象的CurrentRegion屬性可以返回包含指定單元格在內的一個連續的矩形區域,Rows表示某個區域中所有行組成的集合,通過Count屬性返回工作簿中所有的工作表數量。
計算井口數量關鍵代碼為:
wellCount=Range("A1").CurrentRegion.Rows.Count-1
⑵ 定義一個wellName獲取井號,通過當前活動單元格ActiveCell屬性的Value值,來獲取當前單元格的井號。通過Trim函數,移除字符串兩側的空白字符或其他預定義字符。
獲取井號關鍵代碼為:
wellname=Trim(ActiveCell.Value)
⑶ 打開工射孔數據文件,即對應井號的射孔數據。定義wellFile存放射孔數據文件路徑,通過OFS對象的fileExists方法判斷射孔數據文件是否存在,若存在,則通過Workbooks中的Open事件打開射孔數據。
打開射孔數據關鍵代碼為:
wellFile=strPath+wellname+".xlsx"
If objFileSystem.fileExists(wellFile) Then
Application.Workbooks.Open wellFile
⑷ Worksheet對象的UsedRange屬性可以返回工作表中已經使用的單元格圍成的矩形區域,首先計算出“工藝改造數據”表單中將“工藝改造數據”表中已經使用的單元格圍成的矩形區域的行數,插入“工藝改造數據”表并使每個區域與下一個區域之間有兩行的距離。通過Range對象的Value屬性為指定的單元格賦值。
以A列為例,關鍵代碼為:
insertWellIndex=ActiveSheet.UsedRange.Rows.Count+2
myRange="A"+Trim(Str(insertWellIndex))
Range(myRange).Value="WELLNAME"
2.3.2 提取所需射孔數據寫入到“工藝改造數據”表中的指定位置
⑴ 計通過Range對象中的Count屬性計算工作簿2中的射孔數據條數。
計算射孔數據條數關鍵代碼為:
n=Range("A1").CurrentRegion.Rows.Count-1
⑵ 通過循環判斷射孔數據的條數是否大于1,對射孔數據進行遍歷,當射孔數據是1條時,說明只有表頭,故不進行操作,進入下一次循環;當射孔數據條數多于1條時,對射孔數據中的關鍵信息進行提取,并寫入到 “工藝改造數據”表指定單元格中。寫入其他信息,再提取工作簿1中的“井號”表單日期數據,處理后寫入“工藝改造數據”表中的指定單元格中。
以提取頂深為例,主要代碼為:
myRange="B"+Trim(Str(i+1))
Range(myRange).Select
Selection.Copy
'粘貼到指定單元格
myRange="F"+Trim(Str(insertWellIndex+i))
Range(myRange).Select
ActiveSheet.Paste
⑶ 通過Range對象的Value屬性,在“工藝改造數據”表單指定單元格中寫入其他信息。
以I列為例,關鍵代碼為:
myRange="I"+Trim(Str(insertWellIndex+i))
Range(myRange).Value=0.2
⑷ 通過Day方法,提取日期中的“日”;Month方法提取日期中的“月”;Year方法提取日期中的“年”。將“年”、“月”、“日”寫入到“工藝改造數據”表單中。
以“日”為例,關鍵代碼為:
currDay=Str(Day(currDate))+"."
Sheets("工藝改造數據").Select
myRange="A"+Trim(Str(insertWellIndex+i))
Range(myRange).Value=currDay
2.3.3 利用射孔記錄,創建壓裂記錄
復制有效射孔記錄區塊,將其粘貼到與它相鄰的下一行區塊,通過Range對象的value屬性修改部分單元格的值,生成壓裂記錄數據。
3 應用效果
經過VBA的編程處理,將多個Excel中的射孔數據提取并整理在了一個Excel中,使需要的數據更規范整齊。
4 結束語
在石油地質項目中會產生成百上千條井的信息,而用軟件進行油藏成圖時,大部分的數據是無效的,在此,有用信息的快速提取顯得至關重要。通過Excel VBA編程,可以將幾百上千個Excel中的射孔數據批量提取出指定的關鍵數據,并將其整理成需要的格式,不但簡單方便,而且極大的提高了效率,節約了時間還提高了數據質量。但需要明確的是,Excel VBA也存在運行速度相對較慢等問題,因此,在實際處理問題時應具體分析是否適合使用這一方法,再做決斷。
參考文獻(References):
[1] 張佩英.自編函數處理Excel中復雜數據[J].實驗室研究與探索,2007.8:150-152
[2] 陳紅柳.Excel 2000中VBA的應用實例[J].職業教育研究,2005.2:120-121
[3] Dydowicz,p.(2013). VBA as a tool for improving outputs from mass data processing,3.1313-1322
[4] Zhang D, Cheng Q, Agterberg F, et al. An improved solution of local window parameters setting for local singularity analysis based on Excel VBA batch processing technology[J]. Computers&Geosciences;,2016.88(C):54-66
[5] 焦萍萍,周顯春.EXCEL中的VBA程序設計[J].電腦知識與技術,2016.11(12):63-64
[6] 李曉玫,楊小平.Excel中的VBA程序設計[J].四川師范大學學報(自然科學版),2004.4:423-426
論文指導 >
SCI期刊推薦 >
論文常見問題 >
SCI常見問題 >