Excel宏读取Wincc变量记录

Excel宏读取Wincc变量记录
Excel宏读取Wincc变量记录

利用Excel宏读取Wincc变量记录生成报表

Dim sPro, sDsn, sSer, sCon, sSql

Dim conn, oRs, oCom

Dim DSNName

Dim i As Integer

Dim sStart, sStop As String

Sub DTPFormat()

'日期控件显示格式

Sheet1.DTPicker1.Format = dtpCustom

Sheet1.DTPicker1.CustomFormat = "yyyy-MM-dd hh:mm"

Sheet1.DTPicker1.Value = Now()

Sheet1.DTPicker2.Format = dtpCustom

Sheet1.DTPicker2.CustomFormat = "yyyy-MM-dd hh:mm"

Sheet1.DTPicker2.Value = Now()

End Sub

Sub get_wincc_data()

'--Get Database DSN name-----------------------------------

Set DSNName = CreateObject("CCHMIRuntime.HMIRuntime")

sDsn = DSNName.Tags("@DatasourceNameRT").Read

'--build connection string-----------------------------------

sPro = "Provider=WinCCOLEDBProvider.1;"

sDsn = "Catalog=" & sDsn & ";"

sSer = "Data Source=.\WinCC"

sCon = sPro & sDsn & sSer

Set conn = CreateObject("ADODB.Connection")

conn.ConnectionString = sCon

conn.CursorLocation = 3

conn.Open

Set oRs = CreateObject("ADODB.Recordset")

Set oCom = CreateObject("https://www.360docs.net/doc/275791789.html,mand")

https://www.360docs.net/doc/275791789.html,mandType = 1

Set oCom.ActiveConnection = conn

'查询启止时间

sStart = Year(DTPicker1.Value) & "-" & Month(DTPicker1.Value) & "-" & Day(DTPicker1.Value) & " " & Hour(DTPicker1.V alue) & ":" & Minute(DTPicker1.Value) sStop = Year(DTPicker2.Value) & "-" & Month(DTPicker2.Value) & "-" & Day(DTPicker2.Value) & " " & Hour(DTPicker2.V alue) & ":" & Minute(DTPicker2.Value) '转为UTC时间

sStart = DateAdd("h", -8, CDate(sStart))

sStop = DateAdd("h", -8, CDate(sStop))

'读取Fan1_T1

sSql = "Tag:R,('ProcessValueArchive\start_flag'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Dim start_time

start_time = DateAdd("h", 8, CDate(oRs.fields(1)))

Sheet1.Cells(i + 3, 2) = start_time

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

'读取Fan1_T2

sSql = "Tag:R,('ProcessValueArchive\end_flag'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Dim end_time

end_time = DateAdd("h", 8, CDate(oRs.fields(1)))

Sheet1.Cells(i + 3, 3) = end_time

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

'读取Fan1_P1

sSql = "Tag:R,('ProcessValueArchive\reason_flag'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Dim manjuan

manjuan = oRs.fields(2).Value

If manjuan = 20 Then

Sheet1.Cells(i + 3, 4) = "是"

Else

Sheet1.Cells(i + 3, 4) = "否"

End If

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

'读取Fan1_P2

sSql = "Tag:R,('ProcessValueArchive\reason_flag'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Dim manjuan_flag

manjuan_flag = oRs.fields(2).Value

If manjuan_flag = 10 Then

Sheet1.Cells(i + 3, 5) = "停车"

ElseIf manjuan_flag = 20 Then

Sheet1.Cells(i + 5, 5) = "自动切换"

ElseIf manjuan_flag = 30 Then

Sheet1.Cells(i + 3, 5) = "手动切换"

End If

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

'读取Fan1_P1

sSql = "Tag:R,('ProcessValueArchive\all_counter'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Sheet1.Cells(i + 3, 6) = oRs.fields(2).Value

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

'读取Fan1_P1

sSql = "Tag:R,('ProcessValueArchive\ok_counter'),'" & sStart & "','" & sStop & "' order by datetime"

https://www.360docs.net/doc/275791789.html,mandText = sSql

Set oRs = oCom.Execute

If (oRs.EOF) Then

oRs.Close

Else

oRs.MoveFirst

i = 0

Do While Not oRs.EOF

Sheet1.Cells(i + 3, 7) = oRs.fields(2).Value

oRs.MoveNext

i = i + 1

Loop

oRs.Close

End If

Set oRs = Nothing

Set conn = Nothing

End Sub

Private Sub DTPicker1_Change()

clear_cell '清除已经填充的数据

get_wincc_data '读取WinCC历史数据

End Sub

Private Sub DTPicker2_Change()

clear_cell '清除已经填充的数据

get_wincc_data '读取WinCC历史数据

End Sub

Sub clear_cell()

For i = 3 To 100

For j = 1 To 10

Cells(i, j) = ""

Next j

Next i

End Sub

WINCC报表详解

在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。早期是由人工抄录然后统计出相关的报表。进入计算机控制阶段,这份工作就需要工控软件来实现。对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。论坛上很多人都在寻求灵活高效的解决方法。 经过这段时间的网上讨论。综合网友们的意见和建议,我们做了总结。并结合WinCC软件本身作了相关的说明。希望能对大家在以后的报表开发中有所帮助。 接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。 一.报表的需求分析 从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。 1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。下面是一个很典型的报表需求,就很能说明这样的问题: 图1. 月报表分析 此报表是典型的工业现场应用,在数据采集没有难度。唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。此类报表在连续生产的行业需求很广泛。比如:钢铁冶金行业需要一天24小时不停运转的系统。 还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分 数据的统计,比如汇总、求和、平均等。如下图也是很典型的应用。

图2. 总分报表 另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。如下图。 图3. 复杂报表 这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。既有历史数据也有实时信息。 当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。用户自己可以灵活的定义报表的内容和样式。比如下图。

最新wincc生成excel

1 给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。 //本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a1 8,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a3 5,a36,a37,a38,a39,a40

Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5")

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel 我们在用户归档中得到数据之后,如果想导出到excel,思路是和把MSHFGrid数据导出类似的。网上有些文章是直接从后台数据表读取数据,本文介绍从数据归档控件导出数据。 1. 假设wincc项目已经创建了用户归档,画面上有一个用户归档控件,名字叫做UA,设置一个按钮,按钮点击事件添加以下vbs脚本 Sub OnClick(ByVal Item) Dim UA,col,row,rows Dim xlapp,objsheet Dim i,j,k,m,n,filename Set UA=ScreenItems("UA") Set rows=UA.GetRowCollection m=rows.Count n=UA.ColumnCount If m>1 Then '如果用户归档控件有记录 Set xlapp=CreateObject("Excel.Application") xlapp.visible=False xlapp.workbooks.add Set objsheet=xlapp.worksheets(1) For k=1 To n ua.ColumnIndex=k objsheet.cells(3,k)=ua.ColumnCaption '字段名称 Next objsheet.cells(1,1)="XX用户归档" For i=1 To m For j= 1 To n objsheet.cells(i+3,j)=ua.GetRow(i).celltext(j) Next Next '以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版 objsheet.range("a1:d1").mergecells=True 'objsheet.range("a1").ColumnWidth =20 '列宽度 objsheet.cells(2,1)="生成时间:" objsheet.cells(2,2)=Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日" objsheet.cells(1,1).HorizontalAlignment = 3 objsheet.range("a3:d" &CStr(3+m)).borders(1).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(1).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(2).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(2).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(3).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(3).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(4).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(4).weight=2 '保存文件 filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成用户归档.xlsx"

wincc生成excel

给wincc中通过vbs写excel的方式做报表的初学者一点脚本 我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。//本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21, a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40 Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5") Set a6=HMIRuntime.Tags("a6") Set a7=HMIRuntime.Tags("a7") Set a8=HMIRuntime.Tags("a8") Set a9=HMIRuntime.Tags("a9") Set a10=HMIRuntime.Tags("a10") Set a11=HMIRuntime.Tags("a11") Set a12=HMIRuntime.Tags("a12") Set a13=HMIRuntime.Tags("a13") Set a14=HMIRuntime.Tags("a14") Set a15=HMIRuntime.Tags("a15")

WinCC和EXCEL数据传递

1、DDE简介 动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE 客户则是从服务器获得这些数据的程序。 DDE对话是由客户程序发动的。客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows 程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就 开始了。 DDE的对话方式有3种: ①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、 服务器发送数据的方式称为冷链。 一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地) 1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn” 图1 2、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中: “计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图2 3、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行 第一列的单元格),重复步骤3可以加入更多的DDE变量 图3 4、Excel程序 图4 Wincc程序 图5 5完成

用OPC做比较省事。 WinCC做OPC Server,Excel做OPC Client。 这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。 对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。看你需要啦! 其次是WINCC软件里的通讯协议要与PC机对应。WINCC提供了SIMATIC S7 PROTOCOL SUITE 通讯驱动程序,包含了多种通讯协议! 最终还有自己亲自实际操作了才有深刻的了解的!! Sub X6309X94AE9X0000X6539_OnClick(Byval Item) Dim fso,myfile Set fso = CreateObject("scripting.FileSystemObject") Set MyFile = fso.GetFile("d:\Excelcode.xls") Dim ObjExcelApp Set objExcelApp = CreateObject("Excel.Application") 'objExcelApp.Visible = True objExcelApp.Workbooks.Open MyFile '上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件 objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").read objExcelApp.ActiveWorkbook.Save '上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下 Dim coldold Set coldold=HMIRuntime.Tags("usercodeold1") coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value '上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面 objExcelApp.Workbooks.Close objExcelApp.Quit Set ObjEXceLapp = Nothing '到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了 coldold.Write '最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中 End Sub 上面这个例子已经调试通过。网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

在wincc 中怎么做才能把报表生成按日期的excel 文件

在wincc 中怎么做才能把报表生成按日期的excel 文件在wincc 中怎么做才能把报表生成按日期的Excel 文件 VBS脚本实现,就是把文件名称以变量的形式表示。参考 '关闭保存 Dim patch,filename filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(N ow))+CStr(Minute(Now))&CStr(Second(Now)) patch= "d:\"&filename&"demo.xls" objExcelApp.ActiveWorkbook.SaveAs patch objExcelApp.Workbooks.Close objExcelApp.Quit Set objExcelApp= Nothing 对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。 Dim excelapp Dim aa,bb,cc Set excelapp = CreateObject("Excel.Application") Set aa = HMIRuntime.tags("tag1") excelapp.visible = False'True excelapp.workbooks.open "D:\excel.xls" bb = Now 'getcurrent_datetime() aa.Read MsgBox CStr(bb) excelapp.cells(1,1).value = "rrrrrr"'111111 excelapp.cells(1,2).value = CStr(bb)

【WinCC】使用VBS读取报警记录数据到EXCEL

【WinCC】使用VBS读取报警记录数据到EXCEL 1概述 介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。 2软件环境 Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007 3访问原理 WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。 当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。 3.1 查询语句格式 查询语句的格式要求如下: AlARMVIEW:SELECT * FROM [ WHERE……optional ] 其中参数信息如下所示: ViewName:数据库表名。必须用需要的语言指定该表。 比如:中文字符表名为:ALGVIEWCHT,英文字符表明为:ALGVIEWENU等。 Condition:为过滤标准。 详细说明请参见下表:

表1查询参数表 3.2查询结果 查询结果作为记录集返回。可以根据需要有选择的返回特定的数据集。例如:oRs.Fields(0).Value 返回的是消息的编号;oRs.Fields(2).Value 返回的是消息的时间戳;oRs.Fields(37).Value返回的是消息文本的内容。记录集的结构如下表所示:

Wincc报表Excel

Sub OnClick(Byval Item) Dim MyVar1 Dim MyVar2 Dim objExcel Dim wb Dim xlsheet Dim rangee Dim Years,mounth,Days,hours,min,sec,daysweek Dim jj,kk,year1,mounth1,Days1,hours1,min1,sec1 Dim yi,er,san,si,wu,i,i1,lei,lei1,lei2,lei3,lei4,lei5 Dim zhou,yue,nian Dim shi,feng,miao,mytime Dim MyHour,MyMinute,myday,mymonth,myyear,a,b,c,d,e,f Set MyVar1=HMIRuntime.Tags("MyVar1") MyVar1.Write Date Set MyVar2=HMIRuntime.Tags("MyVar2") MyVar2.Write Time year1 = CStr(MyVar1.value) mounth1 = CStr(MyVar2.value) kk="d:\report2\" jj=".xls" Set yi = HMIRuntime.Tags("hunhe_1") yi.Read Set er = HMIRuntime.Tags("hunhe_2")

er.Read Set san = HMIRuntime.Tags("hunhe_3") san.Read Set si = HMIRuntime.Tags("hunhe_4") si.Read Set wu = HMIRuntime.Tags("hunhe_5") wu.Read Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set wb=objExcel.Workbooks.Open ("c:\ExcelExample2.xls") Set xlsheet = wb.sheets("Sheet1") xlsheet.range("B4").Value=yi.Value xlsheet.range("C4").Value=er.Value xlsheet.range("D4").Value=san.Value xlsheet.range("E4").Value=si.Value xlsheet.range("F4").Value=wu.Value wb.SaveAs kk & year1 & jj wb.CLOSE objExcel.quit wb=Nothing

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例 (2009-12-30 16:47:45) 转载 标签: 杂谈 用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例子程序 求用VBS实现WINCC的用户归档输出到固定格式的EXCEL表格的方法和例子程序!我主要问题在SQL数据库的查询语句不会。 看见论坛里有关用VBS实现EXCEL的数据查询和导出,我现在想要完成如下功能:每分钟将数据归档,用户可以输入任意的时刻时间查询从任意时刻开始的之后每隔1小时的数据(有点像日报里的24个小时)。我现在对于VBS查询数据库的语句不懂,望大大赐教!谢谢 ''SQL查询语句 Dim strc as string strc = "provider=WinCCOLEDBProvider.1;catalog=CC_RebdI_09_06_22_10_3 8_35R;data source=ComputerName\WinCC" ''这个连接字符串可以在SQl2000中看到 Dim cc1 Set cc1=CreateObject("adodb.connection") cc1.ConnectionString=strc cc1.CursorLocation=3 cc1.open Dim rst As Object Set rst = CreateObject("adodb.recordset") dim ssql as string ssql = "Tag:R,'Archive_3\DB1DBD0','2009-7-29 00:00:00.0000','200 9-7-29 23:59:59.999','timestep=3600,258'" ''Archive_3\I_DB1DBD0归档和变量 ''2009-7-29 00:00:00.0000,2009-7-29 23:59:59.999时间段 ''timestep=3600,258每阁多少秒拿一个数据(3600=1小时),258表示每个时间段取最后一个数据 rst.Open ssql, cc1 ''这样查出来的数据就是一天的每小时的数据 ''对rst记录集处理就可以得到你要的数据 ==========================

wincc的excel报表实例

因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web 页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式 word页面只要在jsp头设置如下指令: <%@page contentType="application/msword;charset=GBK" %> excel如下: <%@page contentType="application/vnd.ms-excel;charset=GBK" %> 使用这种方式客户端必须安装有office软件,用户访问时将在ie中直接用word或excel打开该页面。 此方法优势是模板设计、调整方便,无需在服务器端使用复杂的POI或jxl技术,也无需在客户端使用ActiveX控件技术,更安全、方便,轻松实现较好的打印效果。 microsoft关于服务器端动态创建office文档的资料(asp示例): https://www.360docs.net/doc/275791789.html,/default.aspx?scid=KB;en-us;301044& 简单示例: 使用word建立一文档,画表格如下: ---------------------------- | 用户名 | 真实姓名 | 性别 | ---------------------------- | guest | 路人甲 | 男 | ---------------------------- 保存为Web页test.htm,将test.htm改名为test.jsp,修改其中guest、路人甲、男为从数据库动态查询,如下: <%@ page contentType="application/msword;charset=GBK" %> <%@ page import="java.sql.*" %> 用户信息