搬家第一天-26.Wincc V7.3 利用Office Web Component 做报表

前一次的博客描述了如何利用Microsoft Hierarchical FlexGrid Control V6.0做报表,这个控件生成的报表表头排版不完美,今天我们换一个控件Office Web Component(简称OWC)来生成报表,这种报表可以在WINCC页面做表头排版,简洁美观。

一. 准备工作

1. 数据库准备

    假设后台Sql Server已经有了数据库和相应表格,如何往数据库写入数据前次博客已经描述,这里不再介绍。假设数据表是这个样子。

搬家第一天-26.Wincc V7.3 利用Office Web Component 做报表

2. OWC安装

OWC控件默认不在WINCC安装包内,需要单独安装,在office2003安装包内搜索OWC就可以找到安装程序,office2007及其以上版本找不到这个组件,需要注意。安装完成后,打开wincc项目管理器的页面编辑,右边的Activex组件“添加/删除”,勾选“Microsoft Office SPreadsheet 11.0 ”,拖放到Wincc页面,名称修改为OWC。

二. 脚本

1. 读取数据表在OWC显示

Sub OnClick(ByVal Item)                                                                                            
Dim owc
Dim PCName
Dim scon,ssql,conn,ors,ocom
Dim rscount
Dim InsertRowCount,i
Set owc=ScreenItems("SPReadSheet")
'以下代码首先计算记录数
PCName=HMIRuntime.Tags("@LocalMachineName").Read
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog =MyDB;Data Source = " &PCName & "\WINCC"
Set conn=CreateObject("ADODB.Connection")
ssql="select * from mytable"
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute

'定义表格的数据来源
owc.ActiveSheet.ConnectionString=scon
owc.ActiveSheet.CommandText =ssql
'插入若干行,行数由InsertRowCount定义,表头排版可能有好几行
InsertRowCount=1
rscount=InsertRowCount+1+ors.recordcount '判断最终表格有多少行,便于绘制表格线。本例有表头,有标题行。
For i=1 To InsertRowCount
  owc.ActiveSheet.Rows("1:1").Insert
Next

'合并单元格,并写表头,字体大小,加粗。合并单元格和字段数有关,需要计算清楚
owc.ActiveSheet.Range("a1:g1").Merge
owc.ActiveSheet.Cells(1,1)="***报表"
owc.ActiveSheet.Cells(1,1).Font.Size=20
owc.ActiveSheet.cells(1,1).Font.Bold=True

'加边框
owc.ActiveWorkbook.Sheets(1).Range("a2:g" & rscount).Borders(1).LineStyle=1
owc.ActiveWorkbook.Sheets(1).Range("a2:g" & rscount).Borders(2).LineStyle=1
owc.ActiveWorkbook.Sheets(1).Range("a2:g" & rscount).Borders(3).LineStyle=1
owc.ActiveWorkbook.Sheets(1).Range("a2:g" & rscount).Borders(4).LineStyle=1

'首行居中显示,-4108居中,-4152靠右,这两个数值和Excel里面VBA脚本不一样需要注意
owc.ActiveSheet.Cells(1,1).HorizontalAlignment =-4108
End Sub

2. 导出到xml文件,文件名可以做动态处理,比如关联当前日期时间

Sub OnClick(ByVal Item)     
Dim owc
Set owc=ScreenItems("SPReadSheet")
owc.Export "c:\123.xml"
End Sub

 

经过上述处理,就可以读取SQL Server数据表了。

上一篇:在分布式配置K3中间层时报中间层创建事务失败 处理方法


下一篇:kernel内核编译遇到/usr/bin/ld:scripts/dtc/dtc-parser.tab.o:(.bss+0x50)multiple definitionof“yylloc“