再说说年报,在图形编辑器里制作年报画面,插入一输入输出域:用以输入年份,再加入一个按钮,按钮文本:导出到EXCEL,按钮代码:
Dim objExcelApp
Dim i,n,tagstr
Dim writeRiQi,ksrq,jsrq,max
Dim baobiao,jls,tabname
Dim blm,sj,zhi
Dim ReportYear,ReportMonth
Dim rb(17,12) '17表示18列数据 12表示12月2
Dim TagNameSerial,TagNameArray
'欲显示在EXCEL中的变量名序列
TagNameSerial="AI_HY1_LGh;AI_HY2_LGh;AI_GF1_LGh;AI_GF2_LGh;AI_LF1_LGh;AI_LF2_LGh;AI_BY1_LGh;AI_GZ1_LGh;AI_RL1_LGh;AI_RL2_LGh;AI_SH1_LGh;AI_SH2_LGh;AI_SC1_LGh"
TagNameArray=Split(TagNameSerial,";")
max=UBound(TagNameArray)
' For i=0 To 17
' For n=0 To 23
' rb(i,n)="-"
' Next
' Next
ReportYear=GetTag("ReportYear")
' ReportMonth=GetTag("ReportMonth")
db_open
tabname="UA#ZDGD"
'23点即为当天保存的累计值,可以配合整点归档保存脚本,将保存时间调整到例如23:59:50
sql="SELECT SUM(ZHI) AS 累计值, Tag_name, MONTH(RQ) AS 月 "
sql=sql & "FROM UA#ZDGD "
sql=sql & "WHERE (YEAR(RQ) = " & ReportYear & ") AND ({ fn HOUR(SJ) } = 23) "
sql=sql & "GROUP BY Tag_name, MONTH(RQ) "
'结果集
'累计值 Tag_name 月
'30 AI_BY1_1 1
'5 AI_BY1_1 2
'0 AI_GF1_1 2
'0 AI_GF2_1 2
'0 AI_GZ1_1 2
'0 AI_HY1_1 2
'0 AI_HY2_1 2
'0 AI_LF1_1 2
'0 AI_LF2_1 2
'0 AI_RL1_1 2
'24 AI_RL2_1 2
'12 AI_SC1_1 2
'0 AI_SH1_1 2
'44 AI_SH2_1 2
Set rs=CreateObject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof and not rs.bof then
rs.MoveFirst
Do While Not rs.EOF
'sj= Hour(rs("LastAccess") )
'sj= Hour(rs("sj") )
sj=rs(2) '取day值
blm=rs(1)
zhi=rs(0)
i=0
for i=0 to max
If blm=TagNameArray(i) Then
rb(i,sj)=FormatNumber(zhi,2)
End If
Next
rs.movenext
loop
End If
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "F:\india\wincc\YearReport.xls"
For i=0 To 17
For n=0 To 12
objExcelApp.Cells(n+4, 2+i).Value = rb(i,n)
Next
Next
'特殊单元格赋值
objExcelApp.Cells(1, 2).Value = ReportYear & "Year"
' objExcelApp.Cells(1, 3).Value = ReportMonth & "Month"
objExcelApp.Cells(1, 13).Value = Now
'objExcelApp.Cells(1, 5).Value = WeekdayRturn(Weekday(ksrq))
' objExcelApp.Cells(32, 1).Value = tank_A_kg
' objExcelApp.Cells(32, 2).Value = tank_A_Q
' objExcelApp.Cells(32, 3).Value = tank_B_kg
' objExcelApp.Cells(32, 4).Value = tank_B_Q
' objExcelApp.ActiveWorkbook.Save
这段代码的精髓在于那段SQL语句,是将每个月的合计输出到一个结果集中供报表使用。报表里的合计累计、判断无效数据等还需要EXCEL的配合,但这对经常使用EXCEL的人应该不算是困难。
论坛不然上传附件,否则可以将该项目的源文件上载以供大家斧正,在这里我只是提出一种报表的思路,且是切实可行的。
管理员注:本帖已被纳入此次探讨发帖整理之方案汇总,请
点此详阅