搬家第二天-35.Wincc V7.3 OWC控件讀取SQL Server數據表並后台導出到excel文件生成統計圖表


本文闡述在Wincc V7.3中,如何利用OWC控件讀取數據表,以及如何后台導出excel文件,同時聲稱統計圖表、

一 准備工作

假設sql server有這樣一張數據表

在Wincc頁面中放一個OWC控件,名字修改為OWC,放置一個按鈕鈕,按鈕腳本為:

Sub OnClick(ByVal Item)                          
Dim OWC
Dim PCName
Dim scon,ssql,conn,ors,ocom
Dim rscount
Dim InsertRowCount,i,j,k,m,SourceData
Dim xlapp,fileName,objsheet,objchart
Dim web
Set OWC=ScreenItems("OWC")

'以下代碼首先計算記錄數
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 charttable"
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
HMIRuntime.Tags("OWCRecordCount").Write ors.recordcount
'定義表格的數據來源
OWC.ActiveSheet.ConnectionString=scon
OWC.ActiveSheet.CommandText =ssql
'日期時間格式的字段處理
OWC.Range("a2:a" & CStr(ors.recordcount+1)).NumberFormat="yyyy/mm/dd h:mm:ss"
'插入若干行,行數由InsertRowCount定義,表頭排版可能有好幾行
InsertRowCount=1
rscount=InsertRowCount+1+ors.recordcount '判斷最終表格有多少行,便於繪制表格線
For i=1 To InsertRowCount
  OWC.ActiveSheet.Rows("1:1").Insert
Next
'合並單元格,並寫表頭,字體大小,加粗
OWC.ActiveSheet.Range("a1:e1").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:e" & rscount).Borders(1).LineStyle=1
OWC.ActiveWorkbook.Sheets(1).Range("a2:e" & rscount).Borders(2).LineStyle=1
OWC.ActiveWorkbook.Sheets(1).Range("a2:e" & rscount).Borders(3).LineStyle=1
OWC.ActiveWorkbook.Sheets(1).Range("a2:e" & rscount).Borders(4).LineStyle=1
'居中顯示
OWC.ActiveSheet.Cells(1,1).HorizontalAlignment =-4108


'開始導出到Excel
Set xlapp=CreateObject("Excel.Application")
xlapp.visible=False
xlapp.workbooks.add
Set objsheet=xlapp.worksheets(1)
For k=1 To ors.fields.count
 objsheet.cells(2,k)=OWC.ActiveSheet.cells(2,k)
Next
objsheet.cells(1,1)="XX裝置生產工藝參數報表"
m=ors.recordcount
For i=1 To m
  For j= 1 To ors.fields.count
    objsheet.cells(i+1,j)=OWC.ActiveSheet.cells(i+1,j)
  Next
Next

'以下代碼處理日期時間數據格式以及表格邊框線、標題合並單元格等排版
  objsheet.range("a1:e1").mergecells=True
   objsheet.range("a3:a" & CStr(1+ors.recordcount)).NumberFormat="yyyy/mm/dd hh:mm:ss"
  objsheet.range("a1").ColumnWidth =20
   objsheet.cells(1,1).HorizontalAlignment = 3
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(1).linestyle=9
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(1).weight=2
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(2).linestyle=9
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(2).weight=2
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(3).linestyle=9
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(3).weight=2
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(4).linestyle=9
   objsheet.range("a2:e" & CStr(1+ors.recordcount)).borders(4).weight=2
'以下代碼用於生成散點圖,在2013版本office測試,其他版本可能無效,此處僅做思路示范
'添加圖表以及修改位置和大小
   xlapp.worksheets.add
   xlapp.sheets("sheet2").Select
   xlapp.activesheet.Shapes.AddChart2 240,"xlXYScatterSmooth"
    'Msgbox "sheet2上面圖標個數為" & CStr(xlapp.activesheet.Shapes.count)
   xlapp.activesheet.Shapes.item(1).Select '選中當前圖表
   xlapp.activesheet.Shapes.item(1).Height=400
   xlapp.activesheet.Shapes.item(1).Width=600
   xlapp.activesheet.Shapes.item(1).Top=30
   xlapp.activesheet.Shapes.item(1).Left=30
'添加數據
   Set SourceData=xlapp.ActiveChart.SeriesCollection
   SourceData.add objsheet.range("a2:e" & CStr(1+ors.recordcount)),True  '設置數據來源范圍
  xlapp.ActiveChart.PlotArea.Select
   'xlapp.ActiveChart.ChartType = "Excel.XlChartType.xlXYScatterSmooth"
   xlapp.ActiveChart.ChartType =72 '平滑散點圖
  'charttype各個類型的對應數值不是連續的,詳細信息參考http://www.exceltip.net/thread-7361-1-1.html
   '在各條曲線上顯示數值
   For i=1 To 4
    xlapp.ActiveChart.FullSeriesCollection(i).Select
    xlapp.ActiveChart.FullSeriesCollection(i).ApplyDataLabels
   Next
   '設置圖表標題
  xlapp.ActiveChart.HasTitle=True
  xlapp.ActiveChart.ChartTitle.Characters.Text="**裝置溫度壓力流量液位曲線圖"
  xlapp.ActiveChart.ChartTitle.font.size=20


  
'以下代碼用於后台保存  
   filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "點" & Minute(Now) & "分" & Second(Now) & "秒生成生產報表.xlsx"
   xlapp.Activeworkbook.saveas (filename)
   xlapp.workbooks.close
   xlapp.quit
   Msgbox "成功導出到C:\"  
End Sub

 

保存后運行,OWC查詢數據表結果是這樣子

導出的excel文件和統計圖表是這個樣子:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM