摘 要:本文通過VB編寫程序?qū)ν晃募A中多個Excel中的大量數(shù)據(jù)同時處理,提高數(shù)據(jù)處理的準確性以及工作效率。
關(guān)鍵詞:多文件處理;VB編程
中圖分類號:TP273.5
在程序開發(fā)語言中,VisualBasic是現(xiàn)在最簡單、最容易的語言。在工程數(shù)據(jù)處理中會出現(xiàn)同時從多文件中提取部分數(shù)據(jù)到同一文件中。人工手動的方法會造成時間及資源的浪費并影響數(shù)據(jù)提取的準確。利用VB程序?qū)Χ鄠€Excel進行同時處理,充分發(fā)揮利用VB編程的快捷和計算機處理的準確及高效率。
1 設(shè)計思路及相關(guān)程序代碼
基本思路為:(1)設(shè)計程序界面;(2)人工輸入操作基本信息;(3)生成相應(yīng)文件;(4)在所有源文件中查找相應(yīng)數(shù)據(jù)行列;(5)進行數(shù)據(jù)處理并退出保存文件。
連接VB語言與Excel之間的操作及代碼:(1)引用Excel類型庫:VB6.0下拉菜單“工程”選擇“引用”,選中“Microsoft Excel 12.0 Object Library”;(2)定義excel程序Dim S As Excel.Application,工作簿Dim S As Excel.Workbook,工作表Dim S As Excel.Worksheet;(3)創(chuàng)建對象Set S=CreateObject(\"Excel.Application\"),工作簿Set SA=xl.Workbooks.Add,工作表Set SQ=SA.Worksheets(\"sheet1\");(4)單元格賦值:xlS.Cells(x,y)=值;(5)打開文件Set q=dk.Workbooks.Open(“路徑/文件名”),保存xlB.Save,退出xlA.Quit。
2 實例應(yīng)用
2.1 數(shù)據(jù)背景
筆者需要從39個包含50多行數(shù)據(jù)的Excel文件中各提取4行數(shù)據(jù),匯合到一個Excel中,并在最終文件中可以直觀的看出數(shù)據(jù)的來源以及符合相應(yīng)的排序。
2.2 程序設(shè)計
界面設(shè)計如圖1。
圖1
2.3 程序源代碼
(僅寫出主要代碼)
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim dkApp(50) As Excel.Application
Dim dkBook(50) As Excel.Workbook
Dim dkSheet(50) As Excel.Worksheet
Dim a As String,d As String,g(50) As String,h As String,i(50) As String,j As String,k As String,l(10) As String
Dim b As Integer, c As Integer, e As Integer,f As Integer, m As Integer, n As Integer,o As Integer, p As Integer,PD As String‘源文件數(shù)量小于50個,此處通過定義變量組的方式定義Excel對象。
Dim a As String,……,d As String ‘基本變量的聲明與定義
Private Sub Form_Load()
Label1.FontSize=15;Label1.Caption=\"文件相關(guān)情況\";……,Command1.Caption=\"生成文件\"
……
Text3.Text=\"未輸入\"
Text3.FontSize=10
End Sub ‘在窗體初始化過程中設(shè)置各控件的基本屬性
Private Sub command4_click() ‘點擊按鈕“點擊輸入文件名”
Text1.Text=\"\"
a=InputBox(\"請輸入文件所在位置\",\"文件位置\",\"\") ‘手動輸入源文件位置
h=InputBox(\"存檔文件名\",\"存檔\",\"\")
j=a \"\\" h \".xlsx\"
Text3.Text=\"文件位置為\" a \",存檔文件為\" j
k=Text1.Text
d=InputBox(\"請輸入文件數(shù)量\",\"文件數(shù)量\",\"\")’判斷是否改變文件名后輸入源文件數(shù)量
e=Val(d)
For f=1 To e
g(f)=InputBox(\"請輸入要打開的第\" Str(f) \"個文件名\", \"文件\", \"\")
i(f)=a \"\\" g(f) \".xlsx\"
Text1.Text=Text1.Text \",\" \"文件\" g(f) \"已命名\"
Next f ‘逐次輸入源文件名
End Sub
Private Sub Command1_Click() ‘點擊按鈕“生成文件”
n=1
Set xlApp=CreateObject(\"Excel.Application\");xlApp.Caption=h;xlApp.Visible=True,Set xlBook=xlApp.Workbooks.Add;Set xlSheet=xlBook.Worksheets(\"sheet1\");xlSheet.Activate ‘?dāng)?shù)據(jù)最終保存的文件的建立及屬性設(shè)置
xlSheet.Cells(1,1)=\"文件號\";xlSheet.Cells(1,2)=\"node\";……;xlSheet.Cells(1,7)=\"F\" ‘利用cells()屬性賦予目標文件第一行的表格內(nèi)容
xlApp.WindowState=xlMinimized ‘生成的excel文件最小化
Text1.Text=k
For f=1 To e
Set dkApp(f)=CreateObject(\"Excel.Application\")
dkApp(f).Visible=True
Set dkBook(f)=dkApp(f).Workbooks.Open(i(f))
Set dkSheet(f)=dkBook(f).Worksheets(\"sheet1\")
dkSheet(f).Activate
dkApp(f).WindowState=xlMinimized
Text1.Text=Text1.Text \",\" \"文件\" g(f) \"建立\"
Next f ‘逐次打開源文件
End Sub
Private Sub Command2_Click() ‘點擊按鈕“調(diào)用數(shù)據(jù)”
m=0;l(0)=\"1\"
Do Until l(m)=\"\"
m=m+1
l(m)=InputBox(\"第\" Str(m) \"節(jié)點行\(zhòng)",\"節(jié)點行\(zhòng)",\"\")
Loop
For f=1 To m-1
For o=1 To e
n=n+1
xlSheet.Cells(n,1)=g(o)
For p=2 To 7
xlSheet.Cells(n,p)=dkSheet(o).Cells(Val(l(f)),p-1)
Next p
Next o
Next f ‘?dāng)?shù)據(jù)調(diào)用
End Sub
Private Sub Command3_Click()
Text3.Enabled=True
xlBook.SaveAs (j)
xlApp.Quit
For f=1 To e
dkApp(f).Quit
Next f
End Sub
2.4 程序運行及結(jié)果
運行結(jié)束后結(jié)果文件如圖2,經(jīng)核對未發(fā)現(xiàn)問題,其他文件進行操作也同樣準確有效。
圖2
3 結(jié)束語
通過VB編程對多個Excel進行操作,實際工作會有要從上百文件中上萬數(shù)據(jù)中將極少部分數(shù)據(jù)信息提取出來,充分利用了計算機處理數(shù)據(jù)的高效,并且該方法只需簡單操作就能利用在短時間解決數(shù)據(jù)處理問題。但需要進一步探究的是對于文件數(shù)量不確定時Excel變量數(shù)量初始設(shè)置,如何既不占內(nèi)存空間又能不用提前預(yù)設(shè)一個很大的值。
參考文獻:
[1]周建麗,張廷萍,周翔.Visual Basic語言程序設(shè)計教程[M].北京:中國水利水電出版社,2009.
[2]金鵬,戴顯著.編寫Vb程序控制Excel處理數(shù)值模擬的數(shù)據(jù)[J].電子制作,2014(08下):55-56.
作者簡介:金鵬(1989.06-),男,四川人,碩士研究生,研究方向:巖土工程、水工結(jié)構(gòu)工程及相關(guān)的信息化管理;劉潘(1991.03-),男,重慶人,碩士研究生,研究方向:巖土工程、水工結(jié)構(gòu)工程及相關(guān)的信息化管理。
作者單位:重慶交通大學(xué),重慶 400074