发布于 2015-03-10 15:34:16
1楼
你需要看看vbs语言参考,这些指令在它里面都有的。
Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim sPro,sDsn,sSer,sCon,conn,sSql,oRs,oCom
Dim tagDSNName
Dim m,i
Dim LocalBeginTime, LocalEndTime,UTCBeginTime, UTCEndTime,sVal
Dim objExcelApp,objExcelBook,objExcelSheet,sheetname
'以上dim行都是定义变量的
item.Enabled = False'item是画面中的控件,=false不允许操作
On Error Resume Next ‘如果发生错误继续执行
sheetname="Sheet1"'定义使用excel的sheet1表
Set objExcelApp = CreateObject("Excel.Application")'调用excel
objExcelApp.Visible = False'excel窗口不可见
objExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx"'打开这个路径下的excel文件
objExcelApp.Worksheets(sheetname).Activate'激活sheet1表
Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT")'定义dsn服务器的名称为数据源服务器
tagDSNName.Read '读取dsn服务器的名称
Set LocalBeginTime = HMIRuntime.Tags("strBeginTime")
LocalBeginTime.Read '读取系统的开始时间
Set LocalEndTime = HMIRuntime.Tags("strEndTime")
LocalEndTime.Read’读取系统结束时间
UTCBeginTime = DateAdd("h" ,-8,LocalBeginTime.Value)
UTCEndTime= DateAdd("h" ,-8,LocalEndTime.Value)‘中国在东八区wincc采用0时区,相差8小时,修正时间差
UTCBeginTime = Year(UTCBeginTime) & "-" & Month(UTCBeginTime) & "-" & Day(UTCBeginTime) & " " & Hour(UTCBeginTime) & ":" & Minute(UTCBeginTime) & ":" & Second(UTCBeginTime)
UTCEndTime = Year(UTCEndTime) & "-" & Month(UTCEndTime) & "-" & Day(UTCEndTime) & " " & Hour(UTCEndTime) & ":" & Minute(UTCEndTime) & ":" & Second(UTCEndTime)'转换开始和结束时间为utc时间
HMIRuntime.Trace "UTC Begin Time: " & UTCBeginTime & vbCrLf
HMIRuntime.Trace "UTC end Time: " & UTCEndTime & vbCrLf'在wincc画面诊断窗口显示utc时间
Set sVal = HMIRuntime.Tags("sVal")
sVal.Read '读取sval变量值
sPro = "Provider=WinCCOLEDBProvider.1;"
sDsn = "Catalog=" &tagDSNName.Value& ";"
sSer = "Data Source=.\WinCC"
sCon = sPro + sDsn + sSer
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open'以上链接wincc数据库
sSql = "Tag:R,('PVArchive\NewTag'),'" & UTCBeginTime & "','" & UTCEndTime & "',"
sSql=sSql+"'order by Timestamp ASC','TimeStep=" & sVal.Value & ",1'"‘设置数据查询字符串
MsgBox sSql'显示查询字符串
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
Set oRs = oCom.Execute'以上设置adodb链接并查询数据库
m = oRs.RecordCount'变量m记录查询到的记录数
If (m > 0) Then'如果记录不空则把读到的数据写到excel表格(2,1)~(2,5)中
objExcelApp.Worksheets(sheetname).cells(2,1).value=oRs.Fields(0).Name
objExcelApp.Worksheets(sheetname).cells(2,2).value=oRs.Fields(1).Name
objExcelApp.Worksheets(sheetname).cells(2,3).value=oRs.Fields(2).Name
objExcelApp.Worksheets(sheetname).cells(2,4).value=oRs.Fields(3).Name
objExcelApp.Worksheets(sheetname).cells(2,5).value=oRs.Fields(4).Name
oRs.MoveFirst '指针指向记录的第一条
i=3
Do While Not oRs.EOF '如果没有到记录的结束,则循环下面的程序
objExcelApp.Worksheets(sheetname).cells(i,1).value= oRs.Fields(0).Value
objExcelApp.Worksheets(sheetname).cells(i,2).value= GetLocalDate(oRs.Fields(1).Value)
objExcelApp.Worksheets(sheetname).cells(i,3).value= oRs.Fields(2).Value
objExcelApp.Worksheets(sheetname).cells(i,4).value= oRs.Fields(3).Value
objExcelApp.Worksheets(sheetname).cells(i,5).value= oRs.Fields(4).Value'写这5个字段的数据到表格中
oRs.MoveNext'记录指针后移一个
i=i+1'i值自加
Loop
oRs.Close’循环结束关闭查询
Else
MsgBox "没有所需数据……"'如果查询记录的数是0则提示没有数据
item.Enabled = True'item允许操作
Set oRs = Nothing
conn.Close
Set conn = Nothing'以上断开数据库链接
objExcelApp.Workbooks.Close'关闭excel
objExcelApp.Quit'退出excel
Set objExcelApp= Nothing'释放excel句柄
Exit Sub
End If
Set oRs = Nothing'释放数据库链接
conn.Close'关闭数据库
Set conn = Nothing'释放数据库链接句柄
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&"demo.xlsx" '路径为d盘下文件名加demo.xlsx
objExcelApp.ActiveWorkbook.SaveAs patch'保存文件
objExcelApp.Workbooks.Close'关闭excel
objExcelApp.Quit'退出excel
Set objExcelApp= Nothing‘释放excel应用的句柄
MsgBox "成功生成数据文件!"'提示生成文件
item.Enabled = True'item允许操作
End Sub '程序结束
http://yunpan.cn/cZgN5YtqHg8V7 (提取码:c4be) vbs语言参考下载
活到老,学到老!为了生活学习吧!