引言
工业报表的设计有好多软件可以使用,但专业软件的操作和使用上或多或少有不尽人意之处。如果可以将程序中的数据“导出到EXCEL”中,相信会给工作带来不少的方便。
图表 1
VB是常用的应用软件开发工具之一,在现在工业中有很多应用。但用VB程序处理工业数据,你可能会遇到麻烦,因为一旦报表格式发生变化,就得修改相应程序,给应用软件的维护工作带来极大的不便。本文将告诉你如何实现VB程序中工业数据导出到EXCEL中,利用OFFICE中的EXCEL轻松进行工业数据处理。从而实现工业报表的设计。
由于VB与EXCEL分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。今天我们要讨论的就是利用DDE实现工业监控参数的输出到EXCEL。
DDE预备知识
DDE是windows平台上的一个完整的通信协议,它使应用程序能彼此交换数据和发送指令。
DDE对话的内容是通过三个标识名来约定的:
1 应用程序名:它是进行DDE对话的双方名称。
2 主题:被讨论的数据域。
3 项目:被讨论的特定数据对象。
设计过程
打开VB程序,添加控件如下表:
控件 CAPTION NAME 其他 作用
Frame 工业参数采集 Frame1 控件容器
Label数组 -- Label(0-11) 参数名称
Text数组 00 Text(0-11) 读取参数
按钮导出 导出到 EXCEL CMDEXPORT 导出数据
按钮退出 退出 Command2 退出程序
Timer --- Timer1 Interval =500 模拟数据
公用对话框 -- CDLOG1 打开EXCEL
图表 2
Private Sub Form_Load()
‘设置随机数种子
Randomize
‘设置标签
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() ‘用随机数模拟实时工业参数,每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
现在。已经有了数据,接下来的工作就进入正题,通过DDE采集数值到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
当然接下来就是要建立程序之间的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" '设置连接项目。
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" '设置连接项目。
Text1(I).LinkPoke '将值放入单元。
Next I
On Error Resume Next ‘简单的出错处理
MsgBox "所有参数导出完毕!请将数据保存以前,不要重复点击“导出”按钮。", 64, "导出完毕!"
End Sub
程序调试
好了,现在可以测试运行一下程序。
图表 4
文本框内的数字0.5秒刷新一次,点击“导出到 EXCEL”,稍等片刻,你将会看到以下内容:
图表 5
此时,在EXCEL中,已经新建了一张工作表,内容如下。剩下的工作相信大家都明白了。
图表 6
总结
本文只是通过一个简单的例子,浅谈一下“导出到EXCEL”的实现。旨在抛砖引玉,给大家共同探讨。程序虽小,但有一定实用价值,读者可加以引用,让工业数据的处理更加简便快捷。
参考文献
1.Windows程序员使用指南(三)----OLE/DDE. [美]Jeffery Clark著,赵人任等译.清华大学出版社,1999
2.MSDN Library Visual Studio 6.0. 微软公司