精华内容
下载资源
问答
  • 2021-08-12 19:16:29

    WINCC自带的报表功能,在工程应用上不太适合国人的风格,所以就想借用强大的excel表格功能来制作灵活多变的丰富的报表。使用Excel的VBA功能实现和WINCC的变量建立连接,实现数据查询,可实现实时数据历史数据库查询,将获得的数据生成报表。效果如下图在这里插入图片描述

    打开excel的代码编辑,并在workbook模块下建立如下代码:

    创建变量:

    Public sStart, sStop, I1, I2, I3, U12, U23, U13, P, Q, PF, EPimp, EQimp, username, WPName, pds
    Dim sPro
    Dim sDsn
    Dim sSer
    Dim sCon
    Dim sSql
    Dim conn
    Dim oRs
    Dim oCom
    Dim DSNName
    Dim i
    Dim j
    Dim k
    Dim arrStart(0 To 63)
    Dim arrStop(0 To 63)
    Dim arrValue(0 To 63)
    Public Tmp_time, CTime1, CTime2
    

    获取WINCC中相应变量的名称,后续程序中需要使用的变量:

    Public Sub get_date()
    Set tagname1 = CreateObject("CCHMIRuntime.HMIRuntime")
    username = tagname1.Tags("@CurrentUser").Read
    I1 = tagname1.Tags("Tag_RP_I1").Read
    I2 = tagname1.Tags("Tag_RP_I2").Read
    I3 = tagname1.Tags("Tag_RP_I3").Read
    U12 = tagname1.Tags("Tag_RP_U12").Read
    U23 = tagname1.Tags("Tag_RP_U23").Read
    U13 = tagname1.Tags("Tag_RP_U13").Read
    P = tagname1.Tags("Tag_RP_P").Read
    Q = tagname1.Tags("Tag_RP_Q").Read
    PF = tagname1.Tags("Tag_RP_PF").Read
    EPimp = tagname1.Tags("Tag_RP_EPimp").Read
    EQimp = tagname1.Tags("Tag_RP_EQimp").Read
    sStart = tagname1.Tags("sStartTime").Read
    sStop = tagname1.Tags("sStopTime").Read
    WPName = tagname1.Tags("WPName").Read
    pds = tagname1.Tags("WPName_pds").Read
    
    End Sub
    

    创建数据库连接:

     Sub DataConnect()
    '--------------------创建连接----------------------------------------
    On Error GoTo myerr
    Set DSNName = CreateObject("CCHMIRuntime.HMIRuntime")
    sDsn = DSNName.Tags("@DatasourceNameRT").Read
    sPro = "Provider=WinCCOLEDBProvider.1;"
    sDsn = "Catalog=" & sDsn & ";"
    sSer = "Data Source =.\WINCC"
    sCon = sPro & sDsn & sSer
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3
    conn.Open
    Set oRs = CreateObject("ADODB.Recordset")
    Set oCom = CreateObject("ADODB.Command")
    oCom.CommandType = 1
    Set oCom.activeconnection = conn
    sSql = "Tag:R,('" & I1 & "'),'0000-00-00 00:00:00.000','0000-00-00 01:00:00.000'"
    oCom.CommandText = sSql
    Set oRs = oCom.Execute
    n = oRs.RecordCount
    If (n > 0) Then
        oRs.movefirst
         Tmp_time = oRs.fields("TimeStamp").Value
        oRs.Close
    Else
    End If
    Exit Sub
    myerr: MsgBox "数据库连接错误!"
    End Sub
    

    查询wincc历史数据库中的数据,并将查询到的数据填充表格,主要代码如下:

    Sub GetDataTotal()
    On Error GoTo myerror
    sSql = "Tag:R,('" & I1 & "'),'" & sStart & "','" & sStop & "','timestep =3600,258'"
    oCom.CommandText = sSql
    Set oRs = oCom.Execute
    n = oRs.RecordCount
    If (n > 0) Then
        oRs.movefirst
        b = 0
        Do While Not oRs.EOF
         Worksheets("Sheet1").Cells(b + 5, 2) = oRs.fields("RealValue").Value
        oRs.movenext
        b = b + 1
        Loop
        oRs.Close
    Else
    MsgBox "查无数据!"
    End If
    'B相电流
    sSql = "Tag:R,('" & I2 & "'),'" & sStart & "','" & sStop & "','timestep =3600,258'"
    oCom.CommandText = sSql
    Set oRs = oCom.Execute
    n = oRs.RecordCount
    If (n > 0) Then
        oRs.movefirst
        b = 0
        Do While Not oRs.EOF
        Worksheets("Sheet1").Cells(b + 5, 3) = oRs.fields("RealValue").Value
        oRs.movenext
        b = b + 1
        Loop
        oRs.Close
    Else
    MsgBox "查无数据!"
    End If
    
    ......
    
    Exit Sub
    myerror: MsgBox "错误,请输入正确的时间!"
    End Sub
    

    表头生成:

    Sub FillDataTotal()
    Cells(1, 1).Value = WPName & "   日报表"
    Cells(2, 12).Value = sStop
    Cells(31, 13).Value = username
    If pds = "高压配电所" Then
     Cells(3, 13).Value = "有功电度(MWh)"
     Cells(3, 14).Value = "无功电度(Mvarh)"
     Cells(29, 6).Value = "(MWh)"
     Cells(29, 12).Value = "(Mvarh)"
     Else
      Cells(3, 13).Value = "有功电度(KWh)"
     Cells(3, 14).Value = "无功电度(Kvarh)"
     Cells(29, 6).Value = "(KWh)"
     Cells(29, 12).Value = "(Kvarh)"
     End If
    End Sub
    

    清空表格:

    Sub cleartable()
    Dim i, j
    For i = 5 To 28
        For j = 2 To 4
        Worksheets("Sheet1").Cells(i, j).Value = 0
        Next
     Next
      For i = 5 To 28
        For j = 6 To 8
         Worksheets("Sheet1").Cells(i, j).Value = 0
        Next
     Next
      For i = 5 To 28
        For j = 10 To 14
         Worksheets("Sheet1").Cells(i, j).Value = Null
        Next
        Next
    End Sub
    

    保护excel表,防止生成的报表数据被篡改:

    Public Sub ProtectAllSheets()
    Dim n As Integer
    For n = 1 To Worksheets.Count
    Worksheets(n).Protect Password:="EHSJDFLjkhshdkduk2735649ex", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True _
    , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
    Next
    End Sub
    

    解锁excel:

    Public Sub UnprotectAllSheets()
    Dim n As Integer
    For n = 1 To Worksheets.Count
    Worksheets(n).Unprotect Password:="EHSJDFLjkhshdkduk2735649ex"
    Next
    End Sub
    

    主程序:获取wincc中的变量名,解锁excel,清空,并创建wincc历史数据库的连接,弹出需要查询的日期,选择完日期后,按日期查询数据,计算,填表。

    Private Sub Workbook_Open()
    Dim year1, year2
    Dim month1, month2
    Dim day1, day2
    get_date         '获取日期,获取出表人
    UnprotectAllSheets   '解锁Excel保护
    cleartable
    DataConnect      '创建数据库连接
    '如果选择的时间超出数据库存储的时间,结束查询。
    CTime1 = CDate(sStop)
    CTime2 = CDate(Tmp_time)
    year1 = Year(CTime1)
    year2 = Year(CTime2)
    month1 = Month(CTime1)
    month2 = Month(CTime2)
    day1 = Day(CTime1)
    day2 = Day(CTime2)
    If (year2 > year1) Then
    MsgBox "时间选择错误,请重选时间!"
    GoTo timeerr
    Else
        If (year2 = year1) Then
            If (month2 > month1) Then
            MsgBox "时间选择错误,请重选时间!"
            GoTo timeerr
            Else
                If (month2 = month1) Then
                    If (day2 > day1) Then
                    MsgBox "时间选择错误,请重选时间!"
                    GoTo timeerr
                    Else
                    End If
                End If
            End If
        End If
    End If
    GetDataTotal     '获取电度总计
    FillDataTotal    '填写电度总计数据
    ProtectAllSheets     '保护Excel内容
    Exit Sub
    timeerr:
    ProtectAllSheets     '保护Excel内容
    
    End Sub
    

    源代码:https://download.csdn.net/download/lujiakai113/21048335

    更多相关内容
  • 亲测,成功,找了很久才找到的,使用FactoryTalk SE采集数据到SQL中,再从SQL中检索数据做到Excel中,常用的报表方法。
  • intouch做excel报表

    2013-03-15 09:10:07
    intouch转存为csv后生成excel报表
  • Labview创建Excel报表

    2018-08-14 14:29:13
    创建EXCEL 报表,可自定义格式,插入字符串 ,可改变字体格式,颜色等
  • 用EXCEL打印模板来打印报表,可以用电子表格来编辑各式各样的报表样式,也可以打印出与狐表EXCEL报表一样的效果。 可以直接进入EXCEL的打印预览窗口,关闭该窗口即可退出电子表格。 如果你的要求不高,完全可以...
  • ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat服务器 3.web页面具体路径:http://localhost:80/poi 4.点击Read excel 2003 or 2007,可以读取2003或2007版Excel 5.点击...
  • 本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。下面跟着小编一起来看下吧
  • Excel做FastReport报表

    2018-10-26 17:53:35
    delphi编程,用Excel做FastReport报表,网络收集资料,共享
  • 资产负债表,凭证,利润表。
  • 个性化定制excel报表数据导出工具
  • 个人写的excel模板导出jar, 采用的是在excel中配置${\w-\w}类型标签,在 IExcelHandle接口集成类中实现具体的excel报表值的计算. 提供源码和jar,其中有测试类和测试excel. 使用了java依赖倒置,将输出源,...
  • Excel 统计 报表 模板

    2020-11-27 13:45:03
    根据商品名称-使用VlookUp关联。...上传每日的数据,通过VlookUp关联,自动填充报表中 通过SUM()公式,清算每日的的总销售数量和总销售额 每列显示当日最高销量 未上传的数据替换成0 强制转换单元格为数值类型
  • EXCEL读Wincc归档数据做报表 设计步骤
  • 在InTouch中如何使用excel做报表.pdf 介绍了关于在InTouch中如何使用excel做报表的详细说明,提供InTouch的技术资料的下载。
  • excel报表控件

    2018-04-28 16:25:01
    excel报表控件 用来开发类似EXCEL的工作报表,有源码;
  • Excel报表系统

    2018-06-29 17:06:48
    Excel一整套交互报表系统,包括日、周、月、年时间段分析;以及各种交互特效!
  • 用EXCEL打印模板来打印报表,可以用电子表格来编辑各式各样的报表样式,也可以打印出与狐表EXCEL报表一样的效果。 可以直接进入EXCEL的打印预览窗口,关闭该窗口即可退出电子表格。 如果你的要求不高,完全可以...
  • ajax实现excel报表导出

    2020-10-15 03:17:35
    主要为大家详细介绍了ajax实现excel报表导出,解决乱码问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • pandas处理excel报表

    2019-05-28 09:47:09
    这只是使用pandas对excel报表操作而已。可以学习,用来处理大量表格汇总数据。不能100%满足大众需求,so,学习下就好了
  • C#用Excel做高级报表

    2016-05-09 14:32:01
    C 用Excel 高级报表
  • 天空动力:(报表大师) 可以批量打印报表 报表批量生成PDF 主要功能可以利用 SHP MDB DB XLS数据生成自定义格式表格。对不同需求报表反提取。
  • 使用 WinCC DataMonitor 基于 Web 发布浏览 Excel 报表文档
  • 对想学RSVIEW32,通过ODBC做报表的新手是不错的例子
  • 本篇文章主要介绍了java生成excel报表文件示例,小编觉得挺不错的,现在分享给大家,也给大家个参考。一起跟随小编过来看看吧
  • excel做报表

    2013-11-20 07:57:19
    海量的excel报表资源,适用于经济类工作人员使用
  • 会计账自动报表系统Excel模板.zip
  • NativeExcel3.1仿Excel的Delphi报表控件及实例..rar
  • 合并会计报表模板Excel系统,用来工作学习的好工具
  • 自己编写的数据库报表工具,将数据库表转化为Excel报表,WPF编写;方便写文档使用。自己编写的数据库报表工具,将数据库表转化为Excel报表,WPF编写;方便写文档使用。修复不能更改账户密码问题。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,516
精华内容 24,606
关键字:

如何做excel报表