相关文章推荐
眉毛粗的毛衣  ·  关于开展2024-2025学年第一学期 ...·  1 年前    · 
强健的小马驹  ·  Android项目在 app 中通过 ...·  1 年前    · 
傲视众生的葡萄  ·  VBA动态数组简单应用_vba ...·  1 年前    · 
不羁的桔子  ·  JWT实战:使用axios+PHP实现登录认 ...·  2 年前    · 
酒量小的楼房  ·  sas—日期格式及函数·  2 年前    · 
Code  ›  如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)开发者社区
sub 电子表格 vbs wincc
https://cloud.tencent.com/developer/article/1897059
直爽的匕首
2 年前
作者头像
剑指工控
0 篇文章

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 剑指工控 > 如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

作者头像
剑指工控
发布 于 2021-11-04 11:21:17
4.1K 2
发布 于 2021-11-04 11:21:17
举报

1、 概述

本文主要介绍如何通过 VBS 操作 WINCC 在线数据表格控件。

  • 开发环境: PCS7 V8.2 SP1 / WINCC 7.4 SP1
  • 使用限制:

1) 时间间隔最多至 1 分钟

2) 时间范围太长,数据加载可能会比较慢

3) 导出文件 EXCEL 没有置顶,导出后要切换到 EXCEL 程序。

  • 扩展性: 可扩展选择参数、保存导出文件、生成 PDF 等功能。

本例采用将参数提前组态在控件内,运行中通过复选框来实现选择。也可完全使用脚本实现参数添加。

  • 详见附加信息>通过脚本新增参数

2、 运行效果

图 1 根据选择查询数据

图 2 导出数据成功

图 3 在 EXCEL 中查看导出的数据文件

图 4 在 EXCEL 中查看导出的数据文件(选择部分列)

3、 项目组态

3.1

画面部件说明

图 5 测试画面部件说明

3.1.1 添加时间控件

添加 WINCC Activex 控件 Date and time picker,如下图:

图 6 添加时间控件

3.1.2 设置导出模板

本例设置的 excel 文件模板路径:"\\"+ServerName +"\Export\Export.xlsx",可根据项目情况采用其它导出路径和模板。如果更换了模板或路径,必须修改导出脚本内的路径。

模板内主要设置了字体、数据格式、显示的小数点位数和列宽,也可再增加页眉、页脚、LOGO 等,以达到更好的显示效果。

3.2

画面打开

在画面打开事件内,设置如下脚本,用于初始化画面内各控件:

Sub OnOpen() 
 Dim ioTimeFactor,tbl1,dtpStart,dtpEnd
 Set tbl1=ScreenItems("tbl1")
 Set ioTimeFactor = ScreenItems("ioTimeFactor")
 Set dtpStart = ScreenItems("dtpStart")
 Set dtpEnd = ScreenItems("dtpEnd")
 '将实际设置的系数显示在设定值上
 ioTimeFactor. OutputValue = tbl1.TimeStepFactor
 '设置时间系数设置 IO 域类型为输入
 ioTimeFactor.BoxType =1 
 '设定表格为开始-结束时间范围
 tbl1.TimeColumnRangeType=1
 '设置时间控件显示格式
 dtpStart.Format=3
 dtpStart.CustomFormat= "yyyy/MM/dd HH:mm:ss"
 dtpEnd.Format=3
 dtpEnd.CustomFormat= "yyyy/MM/dd HH:mm:ss"
 '设置默认时间范围为当天
 dtpStart.Value=FormatDateTime(Year(Now) & "/" &  Month(Now) & "/" & Day (Now),1)'当天 0 点
 dtpEnd.Value=Now'当前时间
End Sub

图 7 画面打开事件脚本

3.3

选择数值参数版设计

图 8 添加参数选择复选框

设置复选框,在复选框更改事件下添加脚本:

Sub Process_OnPropertyChanged(Byval Item, Byval value) 
  Dim i,j,tbl1
  Set tbl1 = ScreenItems("tbl1")
  For i = 0 To item.BoxCount-1
  tbl1.ValueColumnIndex= i
  '判断筛选框是否被选中,如果是,则设置曲线可见
  If (value And 2^i) > 0 Then
    tbl1.ValueColumnVisible = 1
    tbl1.ValueColumnVisible = 0
  End If
End Sub

图 9 数据参数显示隐藏设置脚本

图 10 脚本与控件属性对应关系

3.4

设置时间系数

属性:TimeStepFactor

图 11 修改时间间隔脚本

Sub InputValue_OnPropertyChanged(ByVal Item, ByVal value) 
 Dim tbl1
 Set tbl1 = screenitems("tbl1")
 tbl1.TimeStepFactor=value
End Sub

图 12 修改时间系数

3.5

设定时间范围

图 13 添加时间控件

在查询按钮释放左键事件里:

Sub OnLButtonUp(Byval Item, Byval Flags, Byval x, Byval y) 
  Dim tbl1,dtpStart,dtpEnd
  Set tbl1 = ScreenItems("tbl1")
  Set dtpStart = ScreenItems("dtpStart")
  Set dtpEnd = ScreenItems("dtpEnd")
  '设置表格的时间范围
  tbl1.TimeColumnIndex=0
  If dtpStart.Value < dtpEnd.Value Then
     tbl1.TimeColumnBeginTime=dtpStart.Value
     tbl1.TimeColumnEndTime =dtpEnd.Value
     Msgbox "开始时间小于结束时间,请正确设置!",vbOKonly+vbExclamation
  End If
End Sub

图 14 时间范围查询按钮事件

图 15 修改起始时间范围

3.6

导出

在导出按钮释放左键事件里:

Sub OnLButtonUp(Byval Item, Byval Flags, Byval x, Byval y) 
   Dim objExcelApp,objExcelSheet,sheetname,ServerName,DataFirstRow,TagValue
   TagValue=1
   DataFirstRow=1
   sheetname="sheet1"
   ServerName = HMIRuntime.Tags("@ServerName").Read
'获取表格内数据
   Dim tbl1,col,RowCount,row
   Dim Value()
   Dim i,j,k
   Set tbl1 = ScreenItems("tbl1")
   Set row = tbl1.GetRowCollection'行
   RowCount=row.count
   Redim Value(RowCount+1,tbl1.ValueColumnCount+2)'重定义数值数组,存储时间、数值。行:记
录,列:参数
   Set col = tbl1.GetValueColumnCollection'数值列
   Value(0,0)="序号"
   For j = 1 To RowCount
      Value(j,0)=j
  '时间列名称
   tbl1.TimeColumnIndex=0
   Value(0,1)=tbl1.TimeColumnName
   For i = 1 To tbl1.ValueColumnCount + 1
     '列可见时写数,否则跳出
     tbl1.ValueColumnIndex= i-2
     If tbl1.ValueColumnVisible Or (i = 1) Then '时间列,或数值列显示
      '数值列名称
      If i > 1 Then
         tbl1.ValueColumnIndex= i-2
         Value(0,k)=tbl1.ValueColumnName
      End If
      For j = 1 To RowCount
         Value(j,k)=tbl1.GetRow(j).celltext(i)'注意:celltext()指向数据列(不考虑是否隐藏),
当 celltext()指向隐藏的列时,数据为空。cell
      k=k+1
   End If
'打开 Excel 模板
   Set objExcelApp = CreateObject("Excel.Application")
     objExcelApp.Visible = True
   Set objExcelSheet = objExcelApp.Workbooks.Open("\\"+ServerName +"\Export\Export.xlsx") 
'模板文件存放位置
     objExcelSheet.Activate
'写数据至 EXCEL
  With objExcelApp.Worksheets(sheetname)
   .Range(.Cells(1,1),.Cells(RowCount+1,tbl1.ValueColumnCount+2))= Value
   .Cells(RowCount+2,1)="导出人:"
   .Cells(RowCount+2,2)=HMIRuntime.Tags("@CurrentUserName").Read
   .Cells(RowCount+3,1)="导出位置:"
   .Cells(RowCount+3,2)=HMIRuntime.Tags("@LocalMachineName").Read
   .Cells(RowCount+4,1)="导出时间:"
   .Cells(RowCount+4,2)=Now
   .Cells(RowCount+5,1)="数据库:"
   .Cells(RowCount+5,2)=HMIRuntime.Tags("@DatasourceNameRT").Read
   .Cells(RowCount+6,1)="软件版本:"
   .Cells(RowCount+6,2)=HMIRuntime.Tags("@ServerVersion").Read
  End With
  'Msgbox "导出成功,请在 EXCEL 中查看数据",vbOKonly+vbInformation
'生成新的文件,关闭 Excel
   Dim path1,path2,fso,filename
   Set fso=CreateObject("Scripting.FileSystemObject")
   filename= CStr(Year(Now)) & CStr(Month(Now)) & CStr(Day(Now))& CStr(Hour(Now))& 
CStr(Minute(Now))& CStr(Second(Now))
   path1= "C:\Users\wq_07\Documents\Export\"&filename&".xlsx"
   If fso.FileExists(path1) Then '删除重复文件
       fso.DeleteFile(path1)
       End If
   'objExcelSheet.ExportAsFixedFormat 0,path1 '0-xlTypePDF ,1-xlTypeXPS,直接另存发现
PDF 软件不能打开文件,因此改用导出 PDF
   'CreateReport_RH=path1
   objExcelApp.Worksheets(sheetname).SaveAs path1
  objExcelSheet.close False'关闭 EXCEL,不保存
  objExcelApp.Quit
  '打开导出文件所在的文件夹
  Dim objShell,strFolder
  strFolder=fso.GetParentFolderName(path1)
  Set objShell=CreateObject("Wscript.Shell")
  objshell.Run strFolder
End Sub

图 16 导出按钮脚本

图 17 导出后自动打开文件夹

4、 附加信息

4.1

通过脚本新增参数

Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y) 
  Dim tbl1,col
  Set tbl1 = ScreenItems("tbl1")
  '新增参数
  Set col = tbl1.GetValueColumnCollection.AddItem("R1-Script")
  '参数列名
  col.Caption = "R1-Script"
  '归档变量
  col.Provider = 1
  '归档变量名称
 
推荐文章
眉毛粗的毛衣  ·  关于开展2024-2025学年第一学期 “步道乐跑”课外锻炼的通知-江南大学教务处
1 年前
强健的小马驹  ·  Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决 - 糖~豆豆 - 博客园
1 年前
傲视众生的葡萄  ·  VBA动态数组简单应用_vba 动态数组用法-CSDN博客
1 年前
不羁的桔子  ·  JWT实战:使用axios+PHP实现登录认证 - 搬砖小伙子 - 博客园
2 年前
酒量小的楼房  ·  sas—日期格式及函数
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号