Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能) 您所在的位置:网站首页 wincc变量归档找不到变量 Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)

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

#Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)| 来源: 网络整理| 查看: 265

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控件中显示 五、打印EXCEL5.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-VFDPROGDESKTOP-VFDPROG:是我的计算机名,根据实际修改,也可以使用IP\WINCC 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 oCom Dim strSQL1 Dim 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 = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 '---------读取数据-----------' Datetime = HMIRuntime.Tags("T_Datetime").Read Power = HMIRuntime.Tags("T_Power").Read Count = HMIRuntime.Tags("T_Count").Read '---------测试是否能取到值-----------' MsgBox("Power=" & Power) '---------弹框显示测试数据是否正确-----------' Dim Msg, Style, Title, Help, Ctxt, Response, MyString Msg = "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 = conn oCom.CommandText = strSQL1 Set oRs1 = oCom.Execute '---------关闭数据库-----------' Set oRs1 = Nothing Set oCom = Nothing conn.Close Set 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_A T_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 = sCon conn.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").value MsgBox("查询结束" ) '----------------关闭数据库-----------' Set oRs1 = Nothing Set oCom = Nothing conn.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 = sCon conn.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.Execute m = oRs1.RecordCount MsgBox("查询到表格共有" & m &"行数据") '---------------------设置MSHFlexGrid控件显示--------------------' Dim olist Set olist = ScreenItems("报表") olist.clear olist.Cols=5 '列数 olist.Rows = m+1 '行数量 For i = 0 To 2 olist.ColAlignment(i)=3'列内容居中显示 Next '设置列宽 olist.ColWidth(0) = 800 olist.ColWidth(1) = 1200 olist.ColWidth(2) = 1200 olist.ColWidth(3) = 1200 olist.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.movefirst For i = 1 To m oList.TextMatrix(i ,0) = i oList.TextMatrix(i ,1) = oRs1.Fields(0).Value oList.TextMatrix(i ,2) = oRs1.Fields(1).Value oList.TextMatrix(i ,3) = oRs1.Fields(2).Value oList.TextMatrix(i ,4) = oRs1.Fields(3).Value oRs1.movenext Next MsgBox("查询结束" ) '----------------关闭数据库-----------' Set oRs1 = Nothing Set oCom = Nothing conn.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 = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.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) Then MsgBox("没有符合要求的记录") Else MsgBox("符合要求的记录") oRs1.movefirst For i = 4 To m+3 With 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 With oRs1.MoveNext Next End If '---------------------关闭数据库 --------------------' Set objExcelApp= Nothing Set oRs1 = Nothing Set oCom = Nothing conn.Close Set conn = Nothing End 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 = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.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) Then MsgBox("没有符合要求的记录") Else MsgBox("符合要求的记录") oRs1.movefirst For i = 4 To m+3 With 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 With oRs1.MoveNext Next End If '---------------------以日期命名,并保存到指定文件夹 --------------------' Dim patch,filename filename=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 patch objExcelApp.Workbooks.Close objExcelApp.Quit MsgBox "成功生成数据文件!" '---------------------关闭数据库 --------------------' Set objExcelApp= Nothing Set oRs1 = Nothing Set oCom = Nothing conn.Close Set conn = Nothing End 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 = False 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 = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.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=False objExcelApp.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) Then MsgBox("没有符合要求的记录") Else MsgBox("符合要求的记录") oRs1.movefirst For i = 4 To m+3 With 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 With oRs1.MoveNext Next '---------------------文件同时保存到D:\日报表\web文件夹中--------------------' a.SaveAs "D:\日报表\web\日报表.htm",44 '---------------------以日期命名,并保存到指定文件夹 --------------------' Dim patch,filename filename=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 patch objExcelApp.Workbooks.Close objExcelApp.Quit MsgBox "成功生成数据文件!" '---------------------关闭数据库 --------------------' Set objExcelApp= Nothing Set objExcelBook= Nothing Set objExcelSheet= Nothing Set oRs1 = Nothing Set oCom = Nothing conn.Close Set conn = Nothing End 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 = False 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 = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.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=False objExcelApp.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) Then MsgBox("没有符合要求的记录") Else MsgBox("符合要求的记录") oRs1.movefirst For i = 4 To m+3 With 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 With oRs1.MoveNext Next '------------------以日期命名,并保存到指定文件夹,同时数据保存到打印报表.xlsx中 --------------------' Dim patch,filename filename=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 patch a.SaveAs "D:\日报表\打印报表.xlsx" '文件同时保存到D:\日报表\打印报表.xlsx objExcelApp.Workbooks.Close objExcelApp.Quit '---------------------文件同时保存到D:\日报表\web文件夹中--------------------' a.SaveAs "D:\日报表\web\日报表.htm",44 MsgBox "成功生成数据文件!" '---------------------关闭数据库 --------------------' Set objExcelApp= Nothing Set objExcelBook= Nothing Set objExcelSheet= Nothing Set oRs1 = Nothing Set oCom = Nothing conn.Close Set conn = Nothing End 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模板把数据保存到指定的位置。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有