利用DDE在MS-EXCEL中制作工业报表--控制网



利用DDE在MS-EXCEL中制作工业报表
企业:控制网 日期:2007-06-16
领域:工控机 点击数:1659



引言

    工业报表的设计有好多软件可以使用,但专业软件的操作和使用上或多或少有不尽人意之处。如果可以将程序中的数据“导出到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


    
本文利用随机数模拟工业参数。LabeL标签上显示变量参数名,Text文本框内显示模拟的现场数据。其源程序如下:

    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. 微软公司

  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件: