Wincc v7.5报表教程

  • 目录
  • 一、概述
    • 1.1 前言
    • 1.2 主要功能
    • 1.3 使用的软件
  • 二、Wincc链接SQL Server数据库
    • 2.1 前言
    • 2.2 数据库说明
      • 2.2.1 数据库连接说明
      • 2.2.2 功能说明
    • 2.3 SQL server建库和建表
    • 2.4 建立wincc变量、画面
      • 2.4 1、新建项目:
      • 2.4.2、设备运行相关变量
    • 2.5 按钮脚本
      • 2.5.1随机数生成按钮
      • 2.5.2 保存按钮
  • 三、查询wincc保存的数据
    • 3.1、SQL Sever查询数据
    • 3.2“I/O查询” 按钮
    • 3.3 “MSHFlexGrid控件 查询”
  • 四、数据导出EXCEL并保存、查询
    • 4.1 数据导出到模板中
    • 4.2 以日期命名并指定文件夹保存
    • 4.3Excel在Web Browser控件中显示
  • 五、打印EXCEL
    • 5.1设置首选打印机
    • 5.2新建“打印报表的表格”
    • 5.3更新"生成报表"按钮
  • 六、结束语

目录

一、概述

1.1 前言

在工业生产中很多设备的数据是需要记录的,例如产能、所损耗的电能等都需要定时的记录,作为分析企业生产运营情况的依据。
本文以WinCC V7.5 SP1为例,介绍WinCC如何实现设备运行数据记录并通过报表的形式展现统计数据,如图1所示:

                      图一

1.2 主要功能

可以实现如下功能:
自动记录各设备的运行数据
自动统计各设备的运行时间
按设备、日期呈现报表
按日期和设备编号以EXCEL表格保存数据
可打印存有设备运行数据的表格

1.3 使用的软件

本文档所使用的各软件版本如下:
操作系统版本:Window10 专业版
WinCC 版本: SIMATIC WinCC V7.5 SP1
Office版本: Microsoft Office 2019

二、Wincc链接SQL Server数据库

2.1 前言

本章主要是介绍WINCC7.5 用VB来读写SQL server数据库,网上有不少这类例子,实现功能的方法也很多,但是在运行过程中,或多或少的发现有些关键点没有提及到。

2.2 数据库说明

2.2.1 数据库连接说明

名称

说明

备注

数据库名

Hong

表名

DataTableTest

用户名

密码

数据源

DESKTOP-VFDPROG

DESKTOP-VFDPROG:是我的计算机名,根据实际修改,也可以使用IPWINCC

2.2.2 功能说明

代码

功能

说明

insert

增加

把数据写入到数据库(insert)

update

修改

修改T_ID显示的数据(update)

delete

删除

删除T_ID显示的数据(delete)

select

查询

查询T_ID_A的数据(select)

注:
insert、update、delete、select是PL/SQL对数据库操作的关键字,SQLServer、MySQL、Oracle等均支持。

更多语句功能详见网址:
链接: www.w3school.com.cn.

2.3 SQL server建库和建表

我用的是2019版本的,其他版本的相差无几
1、在开始—>所有程序,找到方框中箭头的那个单击,如下图所示:

倘若没有,请先安装SQL Server 2019

2、然后,弹出下面图片,记住这个服务器名称 后面的值,这个等会程序中会用到,

3、点击 链接,右键“数据库” 点击 “新建数据库” 这是建库


4、然后在“数据库名称(N)”中输入数据库名字,点“确定”。这个名字用英文,我测试,所有名字随便取得

5、新建好了之后,点“数据库” ,就出现了下图信息
6、然后在库“Hong”下面 的“表” 右键—>“新建”—>点击“表(T)”,就出现下图,这是建表,

建表的意思就是建立一个小房间,这个房间专门用来存放某一个单独业务数据,比如专门存放某一个设备启停和产量等信息

7、进入下图,下面这个图是建字段,字段是用来存放设备中的属性,例如编号,时间、电能、停止电能和产量等等

列名就是填写数据英文名称,
数据类型 是字符、数字、浮点要选的类型都不一样,这个数据类型也很重要,它涉及到保存数据的长度,如果选错了,保存数据就会有问题。
不同的数据库都会详细介绍各个类型的使用场景,数据库基础知识我就不介绍了,随便找一个对于数据库的教学视频或者书都会介绍。
允许Null值意思是是否允许这一个值为空。
就是说当保存一个设备编号为1,开始电能为114KW的数据时候,允许为空的情况下,保存数据的时候,如果SQL语句中对于dev_no的值没取到,或者丢失,则这条数据也会保存,那么最终保存到数据库的信息就是编号为空,年龄为开始电能为114KW

8、
注:其中ID需要改成标识,标识增量为1,如下图所示:

9、填好信息后,保存,就会弹出下面图片,这个是填写表的名字,就是给这个小房间弄一个名字,例如DataTableTest


到这里,数据库的建库建表就完成了,这个是鼠标操作,还可以用SQL语句来建表,或者直接拿别的地方导出的库文件直接导入到这个数据库,前提是同类型数据库。

2.4 建立wincc变量、画面

2.4 1、新建项目:

Wincc_report_H

2.4.2、设备运行相关变量

设备运行相关变量以结构变量形式创建。根据需要创建结构变量的元素,
本例中包括T_Datetime(时间)、T_ID(ID)、T_ID_A(查询ID)、T_Power(电能表数据)、T_Count (生产数量)三个元素,数据类型如图4所示。

3、新建画面
3.1新建画面
新建画面,然后就自动出现了下图的这个文件

这里可以修改画面名字

进入画面后,新建一个按钮、数字输入项、多行文本

2.5 按钮脚本

2.5.1随机数生成按钮

目的:
在wincc中,需要大量的数据来进行软件仿真,因此需要使用脚本实现产生随机数的功能。

脚本代码:
全局脚本:

Function MyRnd(min,max)
MyRnd=Rnd*(max-min+1)+min  '在(min,max)之间取随机数
End Function

按钮脚本

Sub OnClick(Byval Item)                        '随机产生0-1000内的数据
HMIRuntime.Tags("T_Power").Write MyRnd(0,1000)
HMIRuntime.Tags("T_Count").Write MyRnd(0,1000)End Sub

脚本图像:

运行结果:

2.5.2 保存按钮

目的:

将数据保存到数据库的DataTableTest的表格中,保存也为增加命令
脚本代码:

打开VB窗口后,开始编码,下面编码中需要修改的地方就是
Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG
Hong:是库的名字
DESKTOP-VFDPROG就是在登陆数据库软件的地方,之前截图让记住的地方

Sub OnClick(Byval Item)                      Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1                       '定义获取到的数据集Dim oComDim strSQL1Dim Datetime,Count,Power'---------打开数据库 -----------'sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1'---------读取数据-----------'       Datetime = HMIRuntime.Tags("T_Datetime").ReadPower = HMIRuntime.Tags("T_Power").ReadCount = HMIRuntime.Tags("T_Count").Read'---------测试是否能取到值-----------'MsgBox("Power=" & Power)'---------弹框显示测试数据是否正确-----------'  Dim Msg, Style, Title, Help, Ctxt, Response, MyStringMsg = "Do you want to continue "  ' 定义信息。Style = vbYesNo + vbQuestion + vbDefaultButton2   ' 定义按钮。Title = "是否保存"   ' 定义标题。Help = "DEMO.HLP"   ' 定义帮助文件。Ctxt = 1000   ' 定义标题' 上下文。' 显示信息。Response = MsgBox(Msg, Style, Title, Help, Ctxt)If Response = vbYes Then   ' 用户按下“是”。MyString = "Yes"   ' 完成某操作。'---------弹框显示测试数据是否正确-----------'    strSQL1 = "INSERT INTO [Hong].[dbo].[DataTableTest] ([Datetime], [Power], [Count])"  'SQL数据库变量strSQL1 = strSQL1 & " VALUES ('" & Datetime & "', '" & Power &"', '" & Count & "')"'从wincc读取的临时变量                            Set oCom.ActiveConnection = connoCom.CommandText = strSQL1           Set oRs1 = oCom.Execute'---------关闭数据库-----------'    Set oRs1 = NothingSet oCom = Nothingconn.CloseSet conn = Nothing'---------弹框显示测试数据是否正确-----------'    Else   ' 用户按下“否”。MyString = "No"   ' 完成某操作。End If'---------弹框显示测试数据是否正确-----------'    End Sub

运行结果:
运行wincc后,首先点击随机生成数据,
然后点击保存,会有一个弹窗。


重要说明:
这个里面最重要的并不是代码怎么写,而是下面这两行’测试是否能取到值
MsgBox(“Power=” & Power)
这个MsgBox是一个弹框的小玩意儿,他的作用就是弹窗显示你括号中的信息,这个东西为什么重要呢,因为他可以调试,当你没取到值或者出现什么错误,WINCC根本一点反应都没有,你就不知道到底执行到什么状态了,所以你可以把这个功能加到任何地方,来测试,就类似调试Html或者JS的时候,用alert来简单调试,在JAVA中用SystemO来打印调试,当然断点后Debug运行也可以。

三、查询wincc保存的数据

3.1、SQL Sever查询数据

1、打开DataTableTest数据库
2、然后弹出下框,直接点击“执行”,就出现了自己插入的数据

3.2“I/O查询” 按钮

查询插入数据,在IO输出域中显示
查询按钮

目的:
按照数据的ID号进行查询数据
脚本代码:

Sub OnClick(Byval Item)                             Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1                       '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim T_ID_AT_ID_A = HMIRuntime.Tags("T_ID_A").read'---------------------打开数据库 --------------------'sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1'---------------------查询数据库 --------------------'
strSQL1 ="SELECT [ID],[Datetime],[Power], [Count] FROM [Hong].[dbo].[DataTableTest]"
strSQL1 = strSQL1 & " WHERE ID = '" & T_ID_A & "'"Set oCom.ActiveConnection = conn
oCom.CommandText = strSQL1
Set oRs1 = oCom.Execute'---------------------查询的数据传送给WinCC的内部变量 --------------------'
HMIRuntime.Tags("T_ID").write oRs1.fields("ID").value
HMIRuntime.Tags("T_Datetime").write oRs1.fields("Datetime").value
HMIRuntime.Tags("T_Power").write oRs1.fields("Power").value
HMIRuntime.Tags("T_Count").write oRs1.fields("Count").valueMsgBox("查询结束" )
'----------------关闭数据库-----------'
Set oRs1 = Nothing
Set oCom = Nothingconn.Close
Set conn = Nothing                        End Sub

脚本图像:
运行结果:

3.3 “MSHFlexGrid控件 查询”

使用MSHFlexGrid 控件来查询数据
1、查询的显示是用WINCC的MSHFlexGrid控件,这个控件默认没加载,所以要添加进来,如下图

2、添加进来后,就是下图这个东东

3、把控件添加到页面中,给控件命名,如下图,其他都在VB中处理,程序可以对表格行数列数等等做操作

4、给查询按钮添加VB事件,如下图

5、脚本代码:

Sub OnClick(Byval Item)                                  Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1                       '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m,i,j,k'---------------------打开数据库 --------------------'sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1'---------------------查询数据库 --------------------'
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"Set oCom.ActiveConnection = conn
oCom.CommandText = strSQL1
Set oRs1 = oCom.Executem = oRs1.RecordCount    MsgBox("查询到表格共有" & m &"行数据")'---------------------设置MSHFlexGrid控件显示--------------------'
Dim olist
Set olist = ScreenItems("报表")olist.clearolist.Cols=5    '列数        olist.Rows = m+1 '行数量For i = 0 To 2olist.ColAlignment(i)=3'列内容居中显示
Next'设置列宽    olist.ColWidth(0) = 800                 olist.ColWidth(1) = 1200olist.ColWidth(2) = 1200olist.ColWidth(3) = 1200olist.ColWidth(4) = 1200'设置表头oList.TextMatrix(0, 0)="序号"
oList.TextMatrix(0, 1)="ID"                      oList.TextMatrix(0, 2) = "时间"   oList.TextMatrix(0, 3) = "电能"oList.TextMatrix(0, 4) = "生产数量"'---------------------将数据写入表格--------------------'
oRs1.movefirstFor i = 1 To m  oList.TextMatrix(i ,0) = i     oList.TextMatrix(i ,1) = oRs1.Fields(0).ValueoList.TextMatrix(i ,2) = oRs1.Fields(1).ValueoList.TextMatrix(i ,3) = oRs1.Fields(2).ValueoList.TextMatrix(i ,4) = oRs1.Fields(3).Value       oRs1.movenextNextMsgBox("查询结束" )
'----------------关闭数据库-----------'
Set oRs1 = Nothing
Set oCom = Nothingconn.Close
Set conn = Nothing                        End Sub

6、运行结果

四、数据导出EXCEL并保存、查询

4.1 数据导出到模板中

1、在D盘中新建表格

2、编辑DataTableTest表格

3、添加导出EXCEL按钮


4、按钮脚本

Sub OnClick(Byval Item)              Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1
Set oCom.ActiveConnection = connoCom.CommandText = strSQL1
Set oRs1 = oCom.Execute              m = oRs1.RecordCount
MsgBox("查询到表格共有" & m &"行数据")'---------------------打开Excel模板 --------------------'
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")objExcelApp.Visible=True
Set a =objExcelApp.Workbooks.Open("D:DataTableTest.xlsx")
Set b =a.Worksheets("Sheet1")b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'
If (oRs1.EOF) ThenMsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                For i = 4 To m+3With objExcelApp.Worksheets("Sheet1").cells(i,1).value=CStr(oRs1.Fields(0).Value).cells(i,2).value=CStr(oRs1.Fields(1).Value).cells(i,3).value=CStr(oRs1.Fields(2).Value).cells(i,4).value=CStr(oRs1.Fields(3).Value)End WithoRs1.MoveNextNext
End If'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = NothingEnd Sub

5、运行结果

4.2 以日期命名并指定文件夹保存

1、D盘新建日报表文件夹

后面的的表格都保存到这个文件夹中

2、改进导出EXCEL按钮

3、按钮新脚本

Sub OnClick(Byval Item)                 Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1
Set oCom.ActiveConnection = connoCom.CommandText = strSQL1
Set oRs1 = oCom.Execute              m = oRs1.RecordCount
MsgBox("查询到表格共有" & m &"行数据")'---------------------打开Excel模板 --------------------'
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")objExcelApp.Visible=True
Set a =objExcelApp.Workbooks.Open("D:DataTableTest.xlsx")
Set b =a.Worksheets("Sheet1")b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'
If (oRs1.EOF) ThenMsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                For i = 4 To m+3With objExcelApp.Worksheets("Sheet1").cells(i,1).value=CStr(oRs1.Fields(0).Value).cells(i,2).value=CStr(oRs1.Fields(1).Value).cells(i,3).value=CStr(oRs1.Fields(2).Value).cells(i,4).value=CStr(oRs1.Fields(3).Value)End WithoRs1.MoveNextNext
End If'---------------------以日期命名,并保存到指定文件夹 --------------------'
Dim patch,filenamefilename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))patch= "D:日报表"&filename&".xlsx" objExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitMsgBox "成功生成数据文件!"'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = NothingEnd Sub

4、运行结果

4.3Excel在Web Browser控件中显示

1、D盘日报表文件夹内新建web文件夹

后面的的表格都保存到这个文件夹中
2、添加Web Browser 控件

这个控件默认没加载,所以也要添加进来


3、把控件添加到页面中,给控件命名Web
4、
新建生成报表按钮
并添加VB事件,如图

5、按钮脚本

Sub OnClick(Byval Item)
On Error Resume Next
item.Enabled = FalseDim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1
Set oCom.ActiveConnection = connoCom.CommandText = strSQL1
Set oRs1 = oCom.Execute              m = oRs1.RecordCount
MsgBox("查询到表格共有" & m &"行数据")'---------------------打开Excel模板 --------------------'
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")objExcelApp.Visible=FalseobjExcelApp.DisplayAlerts=False
Set a =objExcelApp.Workbooks.Open("D:DataTableTest.xlsx")
Set b =a.Worksheets("Sheet1")b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'
If (oRs1.EOF) ThenMsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                For i = 4 To m+3With objExcelApp.Worksheets("Sheet1").cells(i,1).value=CStr(oRs1.Fields(0).Value).cells(i,2).value=CStr(oRs1.Fields(1).Value).cells(i,3).value=CStr(oRs1.Fields(2).Value).cells(i,4).value=CStr(oRs1.Fields(3).Value)End WithoRs1.MoveNextNext'---------------------文件同时保存到D:日报表web文件夹中--------------------'        a.SaveAs "D:日报表web日报表.htm",44'---------------------以日期命名,并保存到指定文件夹 --------------------'
Dim patch,filenamefilename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))patch= "D:日报表"&filename&".xlsx"                  objExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitMsgBox "成功生成数据文件!"         '---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set objExcelBook= Nothing
Set objExcelSheet= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = NothingEnd If'---------------------报表显示 --------------------'
Dim wbCtrl
Set wbCtrl = ScreenItems("Web") '"Web"为Web控件名称
wbCtrl.Navigate  "D:日报表web日报表.htm"item.Enabled=True
End Sub

6、运行结果

五、打印EXCEL

5.1设置首选打印机

这边我暂时没有链接实物打印机

所以先使用打印成PDF

5.2新建“打印报表的表格”

因为每次生成的报表都有不同的名称,

首先在生成报表的按钮中要把数据同时保存在“打印报表.xlsx”中

同样在D盘日报表的文件夹里新建一个”打印报表“excel

5.3更新"生成报表"按钮

1、按钮脚本

Sub OnClick(Byval Item)
On Error Resume Next
item.Enabled = FalseDim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3  conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1
Set oCom.ActiveConnection = connoCom.CommandText = strSQL1
Set oRs1 = oCom.Execute              m = oRs1.RecordCount
MsgBox("查询到表格共有" & m &"行数据")'---------------------打开Excel模板 --------------------'
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")objExcelApp.Visible=FalseobjExcelApp.DisplayAlerts=False
Set a =objExcelApp.Workbooks.Open("D:DataTableTest.xlsx")
Set b =a.Worksheets("Sheet1")b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'
If (oRs1.EOF) ThenMsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                For i = 4 To m+3With objExcelApp.Worksheets("Sheet1").cells(i,1).value=CStr(oRs1.Fields(0).Value).cells(i,2).value=CStr(oRs1.Fields(1).Value).cells(i,3).value=CStr(oRs1.Fields(2).Value).cells(i,4).value=CStr(oRs1.Fields(3).Value)End WithoRs1.MoveNextNext'------------------以日期命名,并保存到指定文件夹,同时数据保存到打印报表.xlsx中 --------------------'
Dim patch,filenamefilename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))patch= "D:日报表"&filename&".xlsx"                          objExcelApp.ActiveWorkbook.SaveAs patcha.SaveAs "D:日报表打印报表.xlsx"          '文件同时保存到D:日报表打印报表.xlsxobjExcelApp.Workbooks.CloseobjExcelApp.Quit'---------------------文件同时保存到D:日报表web文件夹中--------------------'        a.SaveAs "D:日报表web日报表.htm",44MsgBox "成功生成数据文件!"         '---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set objExcelBook= Nothing
Set objExcelSheet= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = NothingEnd If'---------------------报表显示 --------------------'
Dim wbCtrl
Set wbCtrl = ScreenItems("Web") '"Web"为Web控件名称
wbCtrl.Navigate  "D:日报表web日报表.htm"item.Enabled=True
End Sub

2、运行结果

5.4打印按钮
1、新建按钮

2、脚本代码

Sub OnClick(Byval Item)                                                                                                Dim objExcelApp
Dim FileName
FileName=  "D:日报表打印报表.xlsx"        '报表路径
Set objExcelApp=CreateObject("Excel.Application")
objExcelApp.Visible=False
objExcelApp.Workbooks.Open FileName
objExcelApp.ActiveWorkbook.PrintOut()
objExcelApp.Workbooks.Close()
objExcelApp.Quit() End Sub

3、运行结果

六、结束语

至此,已经详细介绍了SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置。

Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)相关推荐

  1. 博图WINCC报表(SQL数据库的建立,TIA_wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置)

    这里写目录标题 目录 一.概述 1.1 前言 1.2 主要功能 1.3 使用的软件 二. SQL server建库和建表 2.1.SQL server建库 2.2SQL server建表 三.建立wi ...

  2. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  3. 使用教程--通过Excel模板导入数据到表单

    大家好,增加Excel导入数据功能在挺早之前就列在我的开发计划中了.由于各种事耽搁,导致才上线这个功能.废话不多说了.直接讲讲,在Z平台中是怎样用Excel导入数据的. 我以两个例子来为大家讲解使用方 ...

  4. python数据导出excel模板中的脚本_Python实现将数据库一键导出为Excel表格的实例...

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  5. android 数据库的种类,Android SQLite数据库

    SQLite是一个开源SQL数据库,用于将数据存储到设备上的文本文件中.Android带有内置的SQLite数据库实现. SQLite支持所有关系数据库功能.为了访问此数据库,您不需要为它建立任何类型 ...

  6. mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc

    数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...

  7. Java 根据Excel模板 导出Excel报表

    工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /*** 根据模板的路径获取模板文件对象* classpath根目录下:/t ...

  8. MySQL数据库---子查询insert,update,delete语句中嵌套子查询

    十.子查询的使用(重点) 1.子查询:指的是查询语句,嵌套查询语句---->一般是放在where子句中,表示条件. 2.子查询的应用使用场景: 2.1查询过程中,虽然给了条件,但是条件的结果并不 ...

  9. PCS7 WINCC报表 1.不需要第三方任何插件实现。

    PCS7 WINCC报表 1.不需要第三方任何插件实现. 2.采用数据库方式实现快速生成WINCC报表. 3.提供脚本源码程序. 4.可移植,也可以导出来生成EXCEL文件. ID:431006932 ...

  10. wincc报表,通用报表,数据报表,独立于任何组态软件运行(

    wincc报表,通用报表,数据报表,独立于任何组态软件运行(为windows,pc端独立软件), 1:可以采集任何pc端组态软件(ifix ,wincc,组态王,simatic_net,pc aces ...

最新文章

  1. C# MySQL数据库的备份 还原 初始化
  2. 面向对象_3-3编程练习
  3. #error使用分析
  4. Docker系列06—基于容器制作镜像并上传到Docker Registry
  5. 南科大计算机科学与技术专业如何,广州大学、深圳大学、汕头大学、南方科技大学,如何排名?...
  6. 二十 二分搜索树的完整实现及其复杂度分析
  7. 第102天:CSS3实现立方体旋转
  8. java 开发必备的安全架构知识
  9. Edge自带的数学求解器介绍
  10. 电脑计算机无法搜索文件,电脑中的文件搜索功能出错怎么办?电脑无法搜索出实际存在的文件如何解决...
  11. ubuntu 19查看和修改时区
  12. 卡内基梅隆计算机硕士录取案例,大神offer | 恭喜再来人学员录取卡耐基梅隆大学-机器学习硕士!...
  13. 制图小课堂:美国机场可视化黑白围棋风格专题
  14. java排球计分表窗口_排球计分程序(五)—— Controller的设计与实现
  15. 移动端长按事件 vue
  16. AVS2实时编码器xavs2的运行
  17. ubuntu16.04查看opencv安装路径以及版本号
  18. HTML+CSS实现网页分页页码
  19. 简单的数据结构介绍(栈、队列、数组、链表、红黑树)
  20. Docker入门之路(一):部署Nginx

热门文章

  1. centos7平台手动搭建snort入侵检测系统
  2. 微信小程序超级占内存_微信小程序彻底拯救16GB手机 小程序与APP占用内存对比...
  3. ubuntu 安装sougou 输入法
  4. 高效科研神器——文献阅读篇
  5. 绕过卡巴斯基通过RPC控制lsass注入DLL
  6. Ipad投屏到windows工具推荐
  7. watir_WatirMaker简介-录制基于Ruby的Watir
  8. python制作界面_python做界面
  9. mp3 资源文件压缩
  10. 嵌入式软件工程师面试题总结