摘 要:本文通過VB編寫程序對同一文件夾中多個Excel中的大量數(shù)據(jù)同時處理,提高數(shù)據(jù)處理的準確性以及工作效率。
關鍵詞:多文件處理;VB編程
中圖分類號:TP273.5
在程序開發(fā)語言中,VisualBasic是現(xiàn)在最簡單、最容易的語言。在工程數(shù)據(jù)處理中會出現(xiàn)同時從多文件中提取部分數(shù)據(jù)到同一文件中。人工手動的方法會造成時間及資源的浪費并影響數(shù)據(jù)提取的準確。利用VB程序對多個Excel進行同時處理,充分發(fā)揮利用VB編程的快捷和計算機處理的準確及高效率。
1 設計思路及相關程序代碼
基本思路為:(1)設計程序界面;(2)人工輸入操作基本信息;(3)生成相應文件;(4)在所有源文件中查找相應數(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 實例應用
2.1 數(shù)據(jù)背景
筆者需要從39個包含50多行數(shù)據(jù)的Excel文件中各提取4行數(shù)據(jù),匯合到一個Excel中,并在最終文件中可以直觀的看出數(shù)據(jù)的來源以及符合相應的排序。
2.2 程序設計
界面設計如圖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=\"文件相關情況\";……,Command1.Caption=\"生成文件\"
……
Text3.Text=\"未輸入\"
Text3.FontSize=10
End Sub ‘在窗體初始化過程中設置各控件的基本屬性
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 ‘數(shù)據(jù)最終保存的文件的建立及屬性設置
xlSheet.Cells(1,1)=\"文件號\";xlSheet.Cells(1,2)=\"node\";……;xlSheet.Cells(1,7)=\"F\" ‘利用cells()屬性賦予目標文件第一行的表格內容
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() ‘點擊按鈕“調用數(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 ‘數(shù)據(jù)調用
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 程序運行及結果
運行結束后結果文件如圖2,經(jīng)核對未發(fā)現(xiàn)問題,其他文件進行操作也同樣準確有效。
圖2
3 結束語
通過VB編程對多個Excel進行操作,實際工作會有要從上百文件中上萬數(shù)據(jù)中將極少部分數(shù)據(jù)信息提取出來,充分利用了計算機處理數(shù)據(jù)的高效,并且該方法只需簡單操作就能利用在短時間解決數(shù)據(jù)處理問題。但需要進一步探究的是對于文件數(shù)量不確定時Excel變量數(shù)量初始設置,如何既不占內存空間又能不用提前預設一個很大的值。
參考文獻:
[1]周建麗,張廷萍,周翔.Visual Basic語言程序設計教程[M].北京:中國水利水電出版社,2009.
[2]金鵬,戴顯著.編寫Vb程序控制Excel處理數(shù)值模擬的數(shù)據(jù)[J].電子制作,2014(08下):55-56.
作者簡介:金鵬(1989.06-),男,四川人,碩士研究生,研究方向:巖土工程、水工結構工程及相關的信息化管理;劉潘(1991.03-),男,重慶人,碩士研究生,研究方向:巖土工程、水工結構工程及相關的信息化管理。
作者單位:重慶交通大學,重慶 400074