当前位置: 首页>編程日記>正文

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

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

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模板把数据保存到指定的位置。


https://www.fengoutiyan.com/post/15749.html

相关文章:

  • wincc报表能生成但没有数据
  • wincc数据库自定义
  • wincc有报表软件么
  • wincc卡在打开数据库项目
  • wincc实时更新数据库
  • wincc字符报表
  • wincc连oracle数据库
  • sql server的wincc实例
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機