当前位置: 首页 > news >正文

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

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

相关文章:

  • Spring中@Value的三种使用方式
  • 诚信型性格分析,诚信型人格的职业发展
  • Python常考面试题汇总
  • 均薪36W还缺人,DFT工程师到底有多重要?
  • mybatis-plus实现多租户Saas
  • 使用Python以UCI心脏病数据集为例,进行数据简单分析
  • URL编码解码详解
  • win10+ubuntu双系统下载ubuntu方法(卸载系统不完整会进入grub)
  • Spring事务传播机制
  • 实现深度理解函数指针
  • C/C++常用预编译指令介绍
  • 杰理强制升级工具4.0使用和原理解析
  • Vue3介绍和安装
  • Linux命令--权限(chmod、chown)--使用/实例
  • flink-sql所有语法详解
  • [LeetCode] Wiggle Sort
  • [笔记] php常见简单功能及函数
  • 30秒的PHP代码片段(1)数组 - Array
  • gcc介绍及安装
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • java取消线程实例
  • MD5加密原理解析及OC版原理实现
  • node.js
  • python学习笔记 - ThreadLocal
  • Python语法速览与机器学习开发环境搭建
  • Redis中的lru算法实现
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 后端_MYSQL
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 警报:线上事故之CountDownLatch的威力
  • 人脸识别最新开发经验demo
  • 如何设计一个比特币钱包服务
  • 我的面试准备过程--容器(更新中)
  • 项目管理碎碎念系列之一:干系人管理
  • 异常机制详解
  • 赢得Docker挑战最佳实践
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 《天龙八部3D》Unity技术方案揭秘
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #include
  • #includecmath
  • (C)一些题4
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (ZT)一个美国文科博士的YardLife
  • (备忘)Java Map 遍历
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)c52学习之旅-点亮LED灯
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)