引言
工業(yè)報表的設(shè)計有好多軟件可以使用,但專業(yè)軟件的操作和使用上或多或少有不盡人意之處。如果可以將程序中的數(shù)據(jù)“導(dǎo)出到EXCEL”中,相信會給工作帶來不少的方便。
圖表 1
VB是常用的應(yīng)用軟件開發(fā)工具之一,在現(xiàn)在工業(yè)中有很多應(yīng)用。但用VB程序處理工業(yè)數(shù)據(jù),你可能會遇到麻煩,因為一旦報表格式發(fā)生變化,就得修改相應(yīng)程序,給應(yīng)用軟件的維護(hù)工作帶來極大的不便。本文將告訴你如何實現(xiàn)VB程序中工業(yè)數(shù)據(jù)導(dǎo)出到EXCEL中,利用OFFICE中的EXCEL輕松進(jìn)行工業(yè)數(shù)據(jù)處理。從而實現(xiàn)工業(yè)報表的設(shè)計。
由于VB與EXCEL分別屬于不同的應(yīng)用系統(tǒng),如何把它們有機(jī)地結(jié)合在一起,是一個值得我們研究的課題。今天我們要討論的就是利用DDE實現(xiàn)工業(yè)監(jiān)控參數(shù)的輸出到EXCEL。
DDE預(yù)備知識
DDE是windows平臺上的一個完整的通信協(xié)議,它使應(yīng)用程序能彼此交換數(shù)據(jù)和發(fā)送指令。
DDE對話的內(nèi)容是通過三個標(biāo)識名來約定的:
1 應(yīng)用程序名:它是進(jìn)行DDE對話的雙方名稱。
2 主題:被討論的數(shù)據(jù)域。
3 項目:被討論的特定數(shù)據(jù)對象。
設(shè)計過程
打開VB程序,添加控件如下表:
控件 CAPTION NAME 其他 作用
Frame 工業(yè)參數(shù)采集 Frame1 控件容器
Label數(shù)組 -- Label(0-11) 參數(shù)名稱
Text數(shù)組 00 Text(0-11) 讀取參數(shù)
按鈕導(dǎo)出 導(dǎo)出到 EXCEL CMDEXPORT 導(dǎo)出數(shù)據(jù)
按鈕退出 退出 Command2 退出程序
Timer --- Timer1 Interval =500 模擬數(shù)據(jù)
公用對話框 -- CDLOG1 打開EXCEL
圖表 2
Private Sub Form_Load()
‘設(shè)置隨機(jī)數(shù)種子
Randomize
‘設(shè)置標(biāo)簽
For I = 0 To 3
Label1(I) = "流量" & " " & I + 1
Next I
For I = 4 To 7
Label1(I) = "料位 " " & I - 3
Next I
For I = 8 To 11
Label1(I) = "壓力" & " " & I - 7
Next I
End Sub
Private Sub Timer1_Timer() ‘用隨機(jī)數(shù)模擬實時工業(yè)參數(shù),每0.5秒刷新一次。
For I = 0 To 3
Text1(I) = Format(Rnd * (100 - 1), "####.##") + " t/H"
Next I
For I = 4 To 7
Text1(I) = Format(Rnd * (1000 - 1), "####.##") + " cm"
Next I
For I = 8 To 11
Text1(I) = Format(Rnd * (100 - 1), "####.##") + " kPa"
Next I
End Sub
現(xiàn)在。已經(jīng)有了數(shù)據(jù),接下來的工作就進(jìn)入正題,通過DDE采集數(shù)值到EXCEL中。在:Private Sub CMDEXPORT_Click() 事件中,首先找到EXCEL的安裝地址。正常安裝EXCEL的地址在C:\program
Files\Microsoft Office\OFFICE11\ 下,但并不是所有人都是典型安裝。所以要判斷一下:
If Dir("C:\program Files\Microsoft Office\OFFICE11\Excel.exe") <> "" Then
Z = Shell("C:\program Files\Microsoft Office\OFFICE11\Excel", 2)
Else
Cdlog1.ShowOpen
fil = Cdlog1.FileName
If fil <> "" Then
On Error Exit sub ‘簡單的出錯處理
Z = Shell(Cdlog1.FileName, 2)
Else
Exit Sub
End If
End If
圖表 3
當(dāng)然接下來就是要建立程序之間的DDE連接,在:Private Sub CMDEXPORT_Click() 事件中:
For k = 0 To 11
If Label1(k).LinkMode = vbNone Then
Label1(k).LinkTopic = "Excel|Sheet1" ‘新建工作表sheep1
Label1(k).LinkItem = "R" & k & "C1"
Label1(k).LinkMode = vbLinkManual '
End If
If Text1(k).LinkMode = vbNone Then
Text1(k).LinkTopic = "Excel|Sheet1"
Text1(k).LinkItem = "R" & k & "C2"
Text1(k).LinkMode = vbLinkManual
End If
Next k
For I = 0 To 11
Label1(I).LinkItem = "R" & I + 1 & "C1" '設(shè)置連接項目。
If I < 4 Then
Label1(I).Caption = "流量" & " " & I + 1
ElseIf I < 8 Then
Label1(I).Caption = "液位" & " " & I - 3
ElseIf I < 12 Then
Label1(I).Caption = "壓力" & " " & I - 7
End If
Label1(I).LinkPoke '將值放入單元。
Text1(I).LinkItem = "R" & I + 1 & "C2" '設(shè)置連接項目。
Text1(I).LinkPoke '將值放入單元。
Next I
On Error Resume Next ‘簡單的出錯處理
MsgBox "所有參數(shù)導(dǎo)出完畢!請將數(shù)據(jù)保存以前,不要重復(fù)點擊“導(dǎo)出”按鈕。", 64, "導(dǎo)出完畢!"
End Sub
程序調(diào)試
好了,現(xiàn)在可以測試運行一下程序。
圖表 4
文本框內(nèi)的數(shù)字0.5秒刷新一次,點擊“導(dǎo)出到 EXCEL”,稍等片刻,你將會看到以下內(nèi)容:
圖表 5
此時,在EXCEL中,已經(jīng)新建了一張工作表,內(nèi)容如下。剩下的工作相信大家都明白了。
圖表 6
總結(jié)
本文只是通過一個簡單的例子,淺談一下“導(dǎo)出到EXCEL”的實現(xiàn)。旨在拋磚引玉,給大家共同探討。程序雖小,但有一定實用價值,讀者可加以引用,讓工業(yè)數(shù)據(jù)的處理更加簡便快捷。
參考文獻(xiàn)
1.Windows程序員使用指南(三)----OLE/DDE. [美]Jeffery Clark著,趙人任等譯.清華大學(xué)出版社,1999
2.MSDN Library Visual Studio 6.0. 微軟公司