胡新惠
廣東中山地質(zhì)工程勘察院 廣東 中山 528400
正文:
理正工程地質(zhì)勘察軟件因具有功能強(qiáng)大、性能穩(wěn)定及通用性強(qiáng)的優(yōu)點(diǎn)而被廣泛應(yīng)用于工程勘察內(nèi)業(yè)資料整理工作中。當(dāng)勘察項(xiàng)目規(guī)模大、場(chǎng)地地層情況復(fù)雜時(shí),若直接在軟件界面上進(jìn)行數(shù)據(jù)錄入,往往工作會(huì)十分繁瑣,且容易出錯(cuò)。Excel軟件數(shù)據(jù)處理功能強(qiáng)大,界面友好,交互性強(qiáng),且具有二次開發(fā)功能。若直接在Excel軟件上進(jìn)行勘察資料錄入,然后生成接口文件導(dǎo)入理正勘察軟件中再進(jìn)行下一步工作,則可以大大提高勘察工作的效率。本文結(jié)合工程實(shí)例,介紹采用VBA語(yǔ)言在Excel軟件上開發(fā)新功能的方法。該新功能可將Excel表格內(nèi)按特定格式錄入的數(shù)據(jù)轉(zhuǎn)換為能被理正勘察軟件識(shí)別的文本格式接口文件。
理正勘察軟件接口文件的內(nèi)容可以包含勘察項(xiàng)目的各種數(shù)據(jù),每種數(shù)據(jù)又由不同的成員組成。理正勘察軟件的幫助文檔對(duì)接口文件的格式及數(shù)據(jù)有詳細(xì)的說(shuō)明(見表1)。這些數(shù)據(jù)的成員一般可由軟件界面輸入。接口文件中的數(shù)據(jù)類型有幾十種之多;每個(gè)數(shù)據(jù)的成員又有幾個(gè)到幾十個(gè)不等。通常,在對(duì)一個(gè)勘察項(xiàng)目進(jìn)內(nèi)業(yè)資料整理時(shí),僅需要用到幾種常見的數(shù)據(jù),以及數(shù)據(jù)中幾個(gè)常用的成員。
表1 理正勘察軟件接口文件常用數(shù)據(jù)說(shuō)明表
接口文件格式說(shuō)明:
(1)同一行中數(shù)據(jù)以制表符(Tab鍵)分隔,如果某些字段的值為空直接用Tab鍵跳過(guò),不能用空格鍵代替Tab鍵。每行數(shù)據(jù)表示一條記錄。
(2)在輸入鉆孔數(shù)據(jù)時(shí)前四個(gè)字符必須為#ZK#,輸入土層數(shù)據(jù)時(shí)前四個(gè)字符必須為#TC#,輸入取樣數(shù)據(jù)時(shí)前四個(gè)字符必須是#QY#。原位試驗(yàn)和室內(nèi)試驗(yàn)按格式對(duì)應(yīng)不同的字符交互相應(yīng)的數(shù)據(jù)。
(3)輸入接口數(shù)據(jù)時(shí),一個(gè)鉆孔對(duì)應(yīng)有多個(gè)土層數(shù)據(jù)、多個(gè)原位試驗(yàn)數(shù)據(jù)、多個(gè)取樣數(shù)據(jù)和室內(nèi)試驗(yàn)數(shù)據(jù);則每條記錄前都需輸入其相對(duì)應(yīng)的字符。
理正勘察軟件中關(guān)于勘察項(xiàng)目的全部錄入信息量比較龐大。但在實(shí)際工作中,我們可能僅僅需要一小部分信息。本文以在Excel 2010軟件上生成理正CAD8.5PB2格式接口文件的范例來(lái)闡述生成接口文件的方法。同時(shí),本實(shí)例主要對(duì)勘察項(xiàng)目中的鉆孔土層信息中常用數(shù)據(jù)進(jìn)行處理。
生成理正勘察接口文件之前,需要在Excel表格中按一定格式輸入相應(yīng)數(shù)據(jù),首先需要進(jìn)行相應(yīng)的數(shù)據(jù)錄入界面設(shè)計(jì)。本文范例設(shè)計(jì)的Excel表格界面如圖1所示。圖中白色區(qū)域?yàn)閿?shù)據(jù)錄入?yún)^(qū)域。
圖1 數(shù)據(jù)錄入界面
圖1 界面中包含四個(gè)按鈕(“清理內(nèi)容”、“生成標(biāo)準(zhǔn)地層”、“刪除行”及“生成接口文件”),均為ActiveX控件。“清理內(nèi)容”按鈕的作用是清空數(shù)據(jù)輸入?yún)^(qū)域既有的內(nèi)容,為后續(xù)數(shù)據(jù)輸入準(zhǔn)備?!吧蓸?biāo)準(zhǔn)地層”按鈕的作用是根據(jù)第一個(gè)鉆孔錄入的地層信息以及總孔數(shù),在界面上為第一個(gè)孔之外的每個(gè)孔生成與第一個(gè)孔一樣的地層信息。“刪除行”按鈕的作用是在數(shù)據(jù)編輯過(guò)程中,刪除光標(biāo)所在行。“生成接口文件”按鈕的作用是當(dāng)每個(gè)孔的錄入信息都準(zhǔn)備好并檢查無(wú)誤時(shí),生成能被理正CAD8.5PB2識(shí)別并讀入的文本格式文件。
VBA代碼的編制一般在VBE環(huán)境中進(jìn)行。可以通過(guò)如下方式進(jìn)入VBE環(huán)境:點(diǎn)擊Excel工作薄菜單欄中開發(fā)工具選項(xiàng)卡,使選項(xiàng)卡中的設(shè)計(jì)模式按鈕處于選中狀態(tài)。然后雙擊界面中的按鈕,便可進(jìn)入到VBE(VBA的編程環(huán)境)界面中,如圖2所示。每個(gè)按鈕均有一段相應(yīng)代碼與之對(duì)應(yīng)。
圖2 VBE環(huán)境
2.2.1 “清理內(nèi)容”相關(guān)代碼
Dim ColNum, RowNum As Long '表格總列數(shù)與總行數(shù)
Dim AcColNum As Long '表格實(shí)際內(nèi)容占據(jù)的列數(shù)
Dim AllRange, ClearRange As Range
ColNum = ActiveSheet.Cells.Columns.Count
RowNum = ActiveSheet.Cells.Rows.Count
AcColNum = Cells(3, ColNum).End(xlToLeft).Column
Set ClearRange = Union(Range(Cells(4, 1), Cells(RowNum,ColNum)), Range(Cells(1, AcColNum + 1), Cells(4, ColNum)))
ClearRange.Clear
2.2.2 “生成標(biāo)準(zhǔn)地層”相關(guān)代碼
Dim ZKNum, DicenNum, ColNum, RowNum, Tempi, ZKLen,ZKStNum, AcColNum As Long '鉆孔數(shù)、地層數(shù)、表格列數(shù)、表格行數(shù)、臨時(shí)變量、鉆孔字符長(zhǎng)度、鉆孔起始編號(hào)、實(shí)際列數(shù)
Dim ZKStr As String '鉆孔字符
Dim TempRng '臨時(shí)區(qū)域
ColNum = ActiveSheet.Cells.Columns.Count
RowNum = ActiveSheet.Cells.Rows.Count
DicenNum = ActiveSheet.Cells(RowNum, 2).End(xlUp).Row - 3
If (DicenNum > 0) Then
ZKNum = Application.InputBox(Prompt:="輸入鉆孔個(gè)數(shù)", Title:="孔數(shù)", Type:=1)
If (ZKNum > 1) Then
ZKStr = Left(Cells(4, 1), 2)
ZKLen = Len(Cells(4, 1))
ZKStNum = CLng(Right(Cells(4, 1), ZKLen - 2))
AcColNum = Cells(3, ColNum).End(xlToLeft).Column
For Tempi = 2 To ZKNum
Range(Cells(4, 2), Cells(DicenNum + 3, AcColNum)).Copy Range(Cells((Tempi - 1) * DicenNum + 4, 2), Cells(Tempi * DicenNum +3, AcColNum))
Cells((Tempi - 1) * DicenNum + 4, 1) = ZKStr ﹠ (Tempi + ZKStNum- 1)
If Tempi Mod 2 = 0 Then Range(Cells((Tempi - 1) * DicenNum + 4,1), Cells(Tempi * DicenNum + 3, AcColNum)).Interior.ColorIndex = 33
Next Tempi
End If
End If
2.2.3 “刪除行”相關(guān)代碼
Selection.EntireRow.Delete
2.2.4 “生成接口文件”相關(guān)代碼
Dim FoldPos, Tempi, DicenNum, RowNum As Long '文件夾字符數(shù)、臨時(shí)變量、總地層個(gè)數(shù)、表格總行數(shù)
Dim FileName, FolderAddress, DicengFile As String '文件名、文件夾及地層文件
Dim ZKStr, InputZK, DCInfo, InputInfo As String '鉆孔名及錄入數(shù)據(jù)
FileName = ThisWorkbook.FullName
FoldPos = InStrRev(FileName, "")
FolderAddress = Left(FileName, FoldPos) '文件夾
DicengFile = FolderAddress ﹠ Cells(2, 10) ﹠ "diceng.txt" '地層文件
Open DicengFile For Output As #1
RowNum = ActiveSheet.Cells.Rows.Count
DicenNum = ActiveSheet.Cells(RowNum, 2).End(xlUp).Row - 3
For Tempi = 4 To DicenNum + 3
ZKStr = Replace(Cells(Tempi, 1), " ", "")
If Len(ZKStr) > 0 Then
InputZK = "#ZK#" ﹠ ZKStr
Print #1, InputZK
End If
InputInfo = "#TC#" ﹠ Cells(Tempi, 6) ﹠ Chr(9) ﹠ Cells(Tempi, 5) ﹠String(2, Chr(9)) '輸入信息添加土層名稱及層底深度并到主層編號(hào)前
DCInfo = Replace(Cells(Tempi, 2), " ", "") '獲取主層編號(hào)數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ Chr(9) '輸入信息添加主層號(hào)并到亞層編號(hào)前
Else
InputInfo = InputInfo ﹠ Chr(9)
End If
DCInfo = Replace(Cells(Tempi, 3), " ", "") '獲取亞層編號(hào)數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ Chr(9) '輸入信息添加亞層號(hào)并到次亞層編號(hào)前
Else
InputInfo = InputInfo ﹠ Chr(9)
End If
DCInfo = Replace(Cells(Tempi, 4), " ", "") '獲取次亞層編號(hào)數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ Chr(9) '輸入信息添加次亞層號(hào)并到地質(zhì)時(shí)代編號(hào)前
Else
InputInfo = InputInfo ﹠ Chr(9)
End If
DCInfo = Replace(Cells(Tempi, 7), " ", "") '獲取地質(zhì)時(shí)代數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ Chr(9) '輸入信息添加地質(zhì)時(shí)代并到成因前
Else
InputInfo = InputInfo ﹠ Chr(9)
End If
DCInfo = Replace(Cells(Tempi, 8), " ", "") '獲取成因數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ String(7, Chr(9)) '輸入信息添加地質(zhì)時(shí)代并到風(fēng)化程度前
Else
InputInfo = InputInfo ﹠ String(7, Chr(9))
End If
DCInfo = Replace(Cells(Tempi, 9), " ", "") '獲取風(fēng)化程度數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo ﹠ String(7, Chr(9)) '輸入信息添加風(fēng)化程度并到描述號(hào)前
Else
InputInfo = InputInfo ﹠ String(7, Chr(9))
End If
DCInfo = Replace(Cells(Tempi, 10), " ", "") '獲取描述數(shù)據(jù)
If Len(DCInfo) > 0 Then
InputInfo = InputInfo ﹠ DCInfo '輸入信息添加描述數(shù)據(jù)
Else
InputInfo = InputInfo ﹠ Chr(9)
End If
Print #1, InputInfo
Next
Close #1
當(dāng)每個(gè)鉆孔的錄入信息都已輸入并檢查無(wú)誤時(shí),點(diǎn)擊“生成接口文件”按鈕就可以生成能被理正CAD8.5PB2識(shí)別并讀入的文本格式文件,該文件與Excel界面文件保存于同一目錄中。本范例中與圖1界面中所輸入內(nèi)容相對(duì)應(yīng)的接口文件如圖3所示。
圖3 理正接口文件
本文結(jié)合工程實(shí)例,介紹了利用VBA編程在Excel軟件中生成理正勘察軟件接口文件的方法。為巖土工程勘察數(shù)據(jù)處理提供了一個(gè)新的思路。該方法已經(jīng)在實(shí)際工程中有所應(yīng)用,大大減輕了工程人員的勞動(dòng)強(qiáng)度,節(jié)省了人力投入,同時(shí)滿足了勘察工作內(nèi)業(yè)處理進(jìn)度的要求,保證了數(shù)據(jù)處理的準(zhǔn)確性,已初步顯現(xiàn)出良好的應(yīng)用價(jià)值。