wincc的excel报表实例
如何在Excel中访问WinCC变量归档数据
1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。
2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack提供的OLE-DB接口才能够解压并读取这些数据。
3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。
建议使用WinCC系统变量“@DatasourceNameRT” 获得当前的Catalog。
Data Source :服务器名称本地:“.\WinCC” 或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID or ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\Value_Name”,可以使用多个名称。
TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。
wincc的excel报表实例
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中直接用wor d或excel打开该页面。
此方法优势是模板设计、调整方便,无需在服务器端使用复杂的POI或jxl技术,也无需在客户端使用ActiveX控件技术,更安全、方便,轻松实现较好的打印效果。
简单示例:使用word建立一文档,画表格如下:----------------------------| 用户名| 真实姓名| 性别|----------------------------| guest | 路人甲| 男|----------------------------保存为Web页test.htm,将test.htm改名为test.jsp,修改其中guest、路人甲、男为从数据库动态查询,如下:<%@ page contentType="application/msword;charset=GBK" %><%@ page import="java.sql.*" %><html xmlns:o="urn:schemas-micr osoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns="http://www.w3.or g/TR/REC-html40"><head><meta http-equiv=C ontent-Type content="text/html; charset=GB2312"><meta name=ProgId content=W ord.Document><meta name=Generator content="Microsoft Word 9"><meta name=Originator content="Microsoft Wor d 9"><title>用户信息</title><!--[if gte mso 9]><xml><o:DocumentProperties><o:Author>evan zhao</o:Author><o:LastAuthor>evan zhao</o:LastAuthor><o:Revision>1</o:Revision><o:TotalTime>1</o:TotalTime><o:Created>2003-08-20T16:26:00Z</o:Created><o:LastSaved>2003-08-20T16:27:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Company>taiping</o:Company><o:Lines>1</o:Lines><o:Paragraphs>1</o:Par agraphs><o:Version>9.2812</o:Version></o:DocumentProperties></xml><![endif]--><!--[if gte mso 9]><xml><w:WordDocument><w:PunctuationKerning><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGr idV erticalSpacing><w:DisplayH orizontalDrawingGridEvery>0</w:D isplayH orizontalDrawingGr idEvery> <w:DisplayV erticalDrawingGr idEvery>2</w:D isplayVerticalDrawingGr idEvery><w:Compatibility><w:SpaceForUL><w:BalanceSingleByteDoubleByteW idth><w:DoNotLeaveBackslashAlone><w:ULTrailSpace><w:DoNotExpandShiftReturn><w:AdjustLineH eightInTable><w:UseFELayout></w:Compatibility></w:WordDocument></xml><![endif]--><style><!--/* Font Definitions */@font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:var iable;mso-font-signatur e:3 135135232 16 0 262145 0;}@font-face{font-family:"\@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:var iable;mso-font-signatur e:3 135135232 16 0 262145 0;}/* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}/* Page D efinitions */@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-gr id:15.6pt;}div.Section1{page:Section1;}--></style></head><body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'><div class=Section1 style='layout-gr id:15.6pt'><table border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;border:none;mso-border-alt:solid w indowtext .5pt;mso-padding-alt:0cm 5.4pt 0cm 5.4pt'><tr><td w idth=189 valign=top style='width:142.0pt;border:solid w indowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"'>用户名</span></p></td><td w idth=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;border-left:none;mso-border-left-alt:solid w indowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"'>真实姓名</span></p></td><td w idth=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;border-left:none;mso-border-left-alt:solid w indowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"'>性别</span></p></td></tr><%Class.forName("sun.jdbc.odbc.JdbcOdbcDr iver");String url="jdbc:odbc:mydb";//连接mydb数据库Connection con=Driver Manager.getC onnection (url, "", "");try{Statement stmt=con.createStatement();//查询employee表ResultSet rs=stmt.executeQuery("select user_name, real_name, gender from employee ");while(rs.next()){%><tr><td w idth=189 valign=top style='width:142.0pt;border:solid w indowtext .5pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span lang=EN-US><%=rs.getString("user_name")%></span></p></td><td w idth=189 valign=top style='width:142.05pt;border-top:none;border-left:none;border-bottom:solid w indowtext .5pt;border-right:solid w indowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-bor der-left-alt:solid w indowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"'><%=rs.getStr ing("real_name")%></span></p></td><td w idth=189 valign=top style='width:142.05pt;border-top:none;border-left:none;border-bottom:solid w indowtext .5pt;border-right:solid w indowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-bor der-left-alt:solid w indowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'><%=rs.getStr ing("gender")%></span></p></td></tr><%} // end whilers.close();stmt.close();} finally {con.close();}%></table><p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>。
在Excel中访问WinCC变量归档数据
如何在Excel中访问WinCC变量归档数据————————————————————————————————作者:————————————————————————————————日期:1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。
2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack提供的OLE-DB接口才能够解压并读取这些数据。
3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。
建议使用WinCC系统变量“@DatasourceNameRT” 获得当前的Catalog。
Data Source :服务器名称本地:“.\WinCC” 或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID or ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\V alue_Name”,可以使用多个名称。
WinCC_To_Excel
可以用C脚本,我已经照此例子实验,可以自动生成EXCEL文件给你转个论坛的帖子做参考取之于“民”用之于“民”,几段代码,希望对后来者有帮助,不要见笑。
1、记录脚本:同一卡片号的每一根钢的数据记录,有多少根,记多少行#include "apdefap.h"int gscAction( void ){#pragma code ()char FileName[20] = " ";double genshu,row,col;__object* pExcel = NULL;genshu=GetTagDouble("记数根数");SetTagDouble("根数记录",genshu);row=genshu+4;if((GetTagBit("钢温记录信号")==1)){pExcel = __object_create("Excel.Application.9"); //9表示用的是office 2000pExcel->Visible =0;pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\JILU.xls");//Cells(row,col)pExcel->Worksheets("sheet1")->Cells(row,1)->V alue=GetTagWord("记数根数");pExcel->Worksheets("sheet1")->Cells(row,2)->V alue=GetTagChar("开始时间");pExcel->Worksheets("sheet1")->Cells(row,3)->V alue=GetTagWord("1#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,4)->V alue=GetTagFloat("1#水箱流量记录"); pExcel->Worksheets("sheet1")->Cells(row,5)->V alue=GetTagWord("2#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,6)->V alue=GetTagFloat("2#水箱流量记录"); pExcel->Worksheets("sheet1")->Cells(row,7)->V alue=GetTagWord("3#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,8)->V alue=GetTagFloat("3#水箱流量记录"); pExcel->Worksheets("sheet1")->Cells(row,9)->V alue=GetTagWord("4#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,10)->V alue=GetTagWord("5#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,11)->V alue=GetTagFloat("4#水箱流量记录"); pExcel->Worksheets("sheet1")->Cells(row,12)->V alue=GetTagWord("6#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,13)->V alue=GetTagWord("7#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,14)->V alue=GetTagFloat("5#水箱流量记录"); pExcel->Worksheets("sheet1")->Cells(row,15)->V alue=GetTagWord("8#高温计温度记录"); pExcel->Worksheets("sheet1")->Cells(row,16)->V alue=GetTagChar("系统时间"); SetTagBit("钢温记录信号",0);}pExcel->ActiveWorkbook->Save;pExcel->Workbooks->Close();pExcel->Quit();__object_delete(pExcel);return 0;}2、存储脚本。
wincc 通过excel生成 日报表 月报表
wincc 通过excel生成日报表月报表
请教:怎样把wincc的归档变量存储到excel中,而且每天生成一个日报表,每月生成一个月报表
问题补充:
请教范范老师,因为我对vb实在是不熟悉,还得请教两个问题:1.这个脚本是不是编在vb的全局脚本里面,2.你说到的执行时间,我不知道要怎么控制这个时间,3.我把变量导入到excel里的是瞬时值还是平均值,因为我想在excel 里显示一个小时的平均值,需要怎么做呢
最佳答案
要做这个需要有一定的VB功底,你可以抄一抄别人的程序,然后运行试验试验,最后把程序变成自己的,这样最快最容易达到目的。
下面是我写的一段日报表,已经投入项目使用。
需要注意的是脚本执行的时间要控制好。
因为字数限制发的是图片版的,还需要敲一下程序。
图片说明:1,程序2,程序23,程序3
标签。
wicc 写EXCEL 表格
3 其他图形代码
Hale Waihona Puke WICC 写EXCEL 表格
1. WINCC新建EXCEL,并把变量值和公式值计算后的值写入 EXCEL表格中
On Error Resume Next Dim objExcelApp Set objExcelApp=CreateObject("Excel.Application")'创建表格对象模型 objExcelApp.Visible=False objExcelApp.Workbooks.add objExcelApp.worksheets(1).name="我的" objExcelApp.Worksheets("我的").Activate '激活工作表格 With objExcelApp.worksheets("我的") '数据写 .cells(2,2).value = HMIRuntime.Tags("EXCEL_1").read .cells(2,3).value= HMIRuntime.Tags("EXCEL_2").read .cells(3,2).value= HMIRuntime.Tags("EXCEL_3").read .cells(3,3).Formula = HMIRuntime.Tags("EXCEL_4").read .cells(4,2).Formula = "=MAX(R2C2:R3C2)" .cells(4,3).Formula = "=AVERAGE(R2C2:R3C3)" End With
objExcelApp.Activeworkbook.saveAs "e:\我的.xls" objExcelApp.Workbooks.Close'退出工作簿 objExcelApp.Quit '表格模型退出 Set objExcelApp= Nothing'释放资源 Set fso=Nothing'释放资源
WINCC嵌入式EXCEL报表系统使用手册
WINCC 嵌入式EXCEL 报表系统使用手册1、打开报表画面点击主画面中“报表”按钮,打开报表画面:2、界面介绍报表画面功能介绍时间设置3、选择报表文件在“报表选择”栏中选择需要生成报表的名称:4、选择报表类型在“类型选择”栏选择报表类型:日报表、月报表、年报表、自由报表,具体介绍如下:●日报表——为一天的报表数据,每小时产生一个记录,共24条记录,时间为“00:00:00”至“23:59:59”。
●月报表——为一月的报表数据,每天产生一个记录,根据月份的不同分别产生28-31条记录,时间为“01 00:00:00”至“30 23:59:59”(或“2823:59:59”/“29 23:59:59”/“31 23:59:59”)。
●年报表——为一年的报表数据,每月产生一个记录,共12条记录,时间为“01-01 00:00:00”至“12-31 23:59:59”。
●自由报表——为指定时间段的报表数据,时间段由“开始时间”和“结束时间”共同决定,每一个“时间间隔”产生一个记录,记录条数由时间段和时间间隔决定。
5、设置报表时间根据报表类型,选择报表时间。
点击“日历”可以打开日历控件,控件中可以快速选择日月年,也可以通过下拉窗口进行选择。
当为日报表时,需要设置“年”、“月”、“日”;当为月报表时,需要设置“年”、“月”;当为年报表时,需要设置“年”;当为自由报表时,需要设置开始和结束时间的“年”、“月”,“日”、“时”、“分”等全部项,间隔时间也需要设置。
6、生成报表当“报表选择”、“类型选择”和时间选择均设置完成后,点击“生成报表”按钮,系统将开始在右边表格中生成出报表,在生成报表的过程中能看见表格中数据逐渐显示,也能通过下方进度条看见完成情况。
生成报表时,空数据区用“#”填充,错误数据区用“##”填充,报表生成完毕后将有“成功生成数据文件!”提示。
同时,报表生成后将自动保存到项目中“report”文件夹下。
Wincc与Excell数据交换实例一二
Wincc与Excell数据交换实例一二Wincc与Excell数据交换实例一二Liking5200,sdyjdx关键字:Wincc,Excell,数据交换,动态数据交换(DDE)现实工程中,经常会遇到重要的参数存储子Excell表格中,在Wincc组态画面中,根据现场参数数值,查询调用对应Excell表格内的数据,同时根据经验在此将更新参数重新保存到Excell中去,这就要求我们实现Wincc与excell的通讯读写。
本文通过两个实例,介绍两种Wincc与excell的读写方法。
实例1Excell不做任何处理,通过Wincc按钮创建C动作,实现对Excell 的读写。
首先建立Excell文件,如d:\\Wincc_Excell_RW.xls。
内容如下:Wincc,建立四个内部变量:ReadExcell_X,Excell_Address_R,WriteExcell_X,Excell_Address_W,分别代表读取的数据,读取地址,写入的数据,输入地址,并在组态画面组态四个IO域与之相对应,组态两个按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,启动读写功能。
为了数据通用,变量类型定义为“文本变量16位字符集”,四个IO域数据格式选“字符串”,根据需要也可设为其他数据类型,但要确保Wincc与Excell相同,不然将发生读写错误或读取不正确。
按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,分别创建C动作如下按钮“按钮-读-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName){#pragma code("Shell32.dll") //调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Reading","Read From Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES){ pExcel = __object_create("Excel.Application");pExcel->Visible = 0;pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_R"));strcpy(tag1,pExcel->Worksheets("sheet1")->Range(add)->V alue);SetTagChar("ReadExcell_X",tag1);//将地址Excell_Address_R,excel文件里面的内容写到外部变量ReadExcell_XpExcel->Quit();//退出Excel}__object_delete(pExcel);}按钮“按钮-写-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("Shell32.dll")//调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Writing","Write Into Excell",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) { pExcel = __object_create("Excel.Application");pExcel->Visible = 0;//控制excel文件是否可见,当1时,excel文件可见.pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_W"));pExcel->Worksheets("sheet1")->Range(add)->Value =GetTagChar("WriteExcell_X");if (MessageBox(handle,"Save the Excell","Write Into Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) //{ } pExcel->ActiveWorkbook->Save();pExcel->DisplayAlerts = 0;pExcel->Workbooks->Close();//关闭文件pExcel->Quit();//退出Excel}__object_delete(pExcel);}运行情况如下:读B1数据:点击是读C5数据:点击是写B1数据:点击是然后再读取B1:点击是如此,我们可以对Excell文件d:\\Wincc_Excell_RW.xls ――Sheet 1的任意数据进行读写。
WINCC报表说明
WINCC报表制作说明本次报表制作以WINCC7.0为基础,利用自带的“变量记录”功能,进行变量归档操作。
然后利用WINCC自带的控件“Wincc Online Table Control”关连变量归档,可实现简单的报表的查询功能。
另一种方法为利用EXCEL的宏访问WINCC数据库(变量归档)。
本方法中需安装Microsoft Office 2003版本。
此种方法优点在于利用WINCC的数据库的开放性,将EXCEL与数据库进行关联,可方便的读取所要查询的数据。
另外EXCEL文件可以按照要求编辑修改表格样式、数据格式等,方便用户存档及打印。
具体实现方法如下:1、在WINCC中新建变量归档2、新建EXCEL文件,用于读取变量归档数据3、打开EXCEL文件,按照要求编辑报表表格样式,在表格中添加“Microsoft Date and Time Picker Control6.0”控件,此控件用于设定要查询报表的日期4、在EXCEL表格中新建查询按钮,作为报表的查询触发器5、编辑代码,进入Visual Basic编辑器进行代码编写,代码中涵盖WINCC归档时间与本地时间的转换及变量与表格的关联性操作。
6、代码编辑完成后,需运行WINCC组态软件,打开新建的EXCEL文件,提示是否启用“宏”操作,此时要选择启用,进入报表表格界面,在日期控件中选择要查询的数据日期,点击查询按钮,归档变量数据就可以显示在对应的表格中,可保存,可打印,可修改。
以上两种报表均在1608009风机在线监测项目上应用。
对于VB代码编辑部分,只需要根据EXCEL表格的样式及变量归档数据名称做出相应的修改即可。
设计部:付友维2017年6月20日。
wincc报表例子vb
用VBS脚本实现,就是把文件名称以变量的形式表示。
参考'关闭保存Dim patch,filenamefilename=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 patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= Nothing对于Excel报表,用VBS最灵活,Excel定义好格式后wincc来填空,平均累计值就用Excel的功能。
Dim excelappDim aa,bb,ccSet excelapp = CreateObject("Excel.Application")Set aa = HMIRuntime.tags("tag1")excelapp.visible = False'Trueexcelapp.workbooks.open "D:\excel.xls"bb = Now 'getcurrent_datetime()aa.ReadMsgBox CStr(bb)excelapp.cells(1,1).value = "rrrrrr"'111111excelapp.cells(1,2).value = CStr(bb)excelapp.cells(2,2).value = CStr(aa.value)excelapp.cells(3,2).value = CInt(aa.value)excelapp.cells(4,2).value = CSng(aa.value)excelapp.cells(5,2).value = CDbl(aa.value)excelapp.cells(6,2).value = CLng(aa.value)excelapp.cells(3,3).value = ScreenItems("33").outputvalueexcelapp.cells(4,4).value = ScreenItems("35").outputvaluecc = "D:\excel" + Mid(CStr(bb), 1, 4)+ Mid(CStr(bb), 6, 2)+ Mid(CStr(bb), 9, 2) + Mid(CStr(bb), 12, 2)+ Mid(CStr(bb), 15, 2)+ Mid(CStr(bb), 18, 2) + ".xls" MsgBox ccexcelapp.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖excelapp.activeworkbook.saveas cc '根据当前日期时间,另存为新的文件'excelapp.activeworkbook.save ’对打开的文件,直接保存'excelapp.activeworkbook.saveAs "D:\excelcopy.xls" ’直接另存为新的文件excelapp.workbooks.closeexcelapp.quitSet excelapp = Nothing第一段:Option ExplicitFunction actionDim fso,myfile,daystr,dstr,fnamedstr = FormatDateTime(Date)fname="d:\" + dstr + ".xls"Set fso = CreateObject("s cripting.FileSystemObject")Set MyFile = fso.GetFile("d:\ExcelExample.xls")MyFile.Copy (fname)End Function第二段:Option ExplicitFunction actionDim fso,myfilep,daystr,dstr,fnameSet fso = CreateObject("s cripting.FileSystemObject")dstr = FormatDateTime(Date)HMIRuntime.Tags("i").write fso.GetAbsolutePathName("")fname=HMIRuntime.ActiveProject.Path++dstr+.xlsDim ObjExcelAppSet objExcelApp = CreateObject("Excel.Application")objExCelApp.Visible = TrueobjExcelApp.Workbooks.Open fnameDim ii=1Do While objExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue<>""i=i+1LoopobjExcelApp.worksheets ("sheet1").Cells(i, 2).VAlue = HMIRuntime.Tags("I-COD").read objExcelApp.worksheets ("sheet1").Cells(i, 3).VAlue = HMIRuntime.Tags("I-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 4).VAlue = HMIRuntime.Tags("I-PH").readobjExcelApp.worksheets ("sheet1").Cells(i, 5).VAlue = HMIRuntime.Tags("I-F").readobjExcelApp.worksheets ("sheet1").Cells(i, 6).VAlue = HMIRuntime.Tags("I-FI").readobjExcelApp.worksheets ("sheet1").Cells(i, 7).VAlue = HMIRuntime.Tags("O-COD").read objExcelApp.worksheets ("sheet1").Cells(i, 8).VAlue = HMIRuntime.Tags("O-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 9).VAlue = HMIRuntime.Tags("O-NH4N").read objExcelApp.worksheets ("sheet1").Cells(i, 10).VAlue = HMIRuntime.Tags("0-P").readobjExcelApp.worksheets ("sheet1").Cells(i, 11).VAlue = HMIRuntime.Tags("O-F").read objExcelApp.worksheets ("sheet1").Cells(i, 12).VAlue = HMIRuntime.Tags("O-FI").read objExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue =NowobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.ClosEobjExcelApp.QuiTSet ObjEXceLapp = NothingEnd Functionc。
WINCC报表详解
在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。
早期是由人工抄录然后统计出相关的报表。
进入计算机控制阶段,这份工作就需要工控软件来实现。
对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。
论坛上很多人都在寻求灵活高效的解决方法。
经过这段时间的网上讨论。
综合网友们的意见和建议,我们做了总结。
并结合WinCC软件本身作了相关的说明。
希望能对大家在以后的报表开发中有所帮助。
接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。
最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。
一.报表的需求分析从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。
1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。
下面是一个很典型的报表需求,就很能说明这样的问题:图1. 月报表分析此报表是典型的工业现场应用,在数据采集没有难度。
唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。
此类报表在连续生产的行业需求很广泛。
比如:钢铁冶金行业需要一天24小时不停运转的系统。
还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分数据的统计,比如汇总、求和、平均等。
如下图也是很典型的应用。
图2. 总分报表另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。
如下图。
图3. 复杂报表这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。
既有历史数据也有实时信息。
当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。
用户自己可以灵活的定义报表的内容和样式。
wincc生成excel
wincc生成excel给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。
方便初学者学习!//log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次//如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。
//本程序主要是演示数据记录的过程。
//在c:\建立一个excel文件,该文件可以是你的报表模版Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim tagshijian,sheetname,username,zhushiDim tagdayDima1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a 19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a3 7,a38,a39,a40 Dim i,j,t,countDim msgDim patch,fnDim d,m,y,oh,mm,ssd=" "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")Set a16=HMIRuntime.Tags("a16")Set a17=HMIRuntime.Tags("a17")Set a18=HMIRuntime.Tags("a18")Set a19=HMIRuntime.Tags("a19")Set a20=HMIRuntime.Tags("a20")Set a21=HMIRuntime.Tags("a21")Set a22=HMIRuntime.Tags("a22")Set a23=HMIRuntime.Tags("a23")Set a24=HMIRuntime.Tags("a24")Set a25=HMIRuntime.Tags("a25")Set a26=HMIRuntime.Tags("a26")Set a27=HMIRuntime.Tags("a27")Set a28=HMIRuntime.Tags("a28")Set a29=HMIRuntime.Tags("a29")Set a30=HMIRuntime.Tags("a30")Set a31=HMIRuntime.Tags("a31")Set a32=HMIRuntime.Tags("a32")Set a33=HMIRuntime.Tags("a33")Set a34=HMIRuntime.Tags("a34")Set a35=HMIRuntime.Tags("a35")Set a36=HMIRuntime.Tags("a36")Set a37=HMIRuntime.Tags("a37")Set a38=HMIRuntime.Tags("a38")Set a39=HMIRuntime.Tags("a39")Set a40=HMIRuntime.Tags("a40")Set count=HMIRuntime.Tags("count")sheetname="Sheet1"tagshijian=NowSet objExcelApp=CreateObject("Excel.Application") objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activatecount.Readt=count.Value +1If t<4 Thencount.Write 4t=4Elsecount.Write tEnd IfIf t>10080 Thencount.Write 3t=4End IfFor t=t To tWith objExcelApp.worksheets(sheetname) .cells(t,1).value=tagshijiana1.Read.cells(t,2).value=a1.Valuea2.Read.cells(t,3).value=a2.Valuea3.Read.cells(t,4).value=a3.Valuea4.Read.cells(t,5).value=a4.Valuea5.Read.cells(t,6).value=a5.Valuea6.Read.cells(t,7).value=a6.Valuea7.Read.cells(t,8).value=a7.Valuea8.Read.cells(t,9).value=a8.Valuea9.Read.cells(t,10).value=a9.Valuea10.Read.cells(t,11).value=a10.Valuea11.Read.cells(t,12).value=a11.Valuea12.Read.cells(t,13).value=a12.Valuea13.Read.cells(t,14).value=a13.Valuea14.Read.cells(t,15).value=a14.Valuea15.Read.cells(t,16).value=a15.Valuea16.Read.cells(t,17).value=a16.Valuea17.Read.cells(t,18).value=a17.Valuea18.Read.cells(t,19).value=a18.Valuea19.Read.cells(t,20).value=a19.Valuea20.Read.cells(t,21).value=a20.Value a21.Read .cells(t,22).value=a21.Value a22.Read .cells(t,23).value=a22.Value a23.Read .cells(t,24).value=a23.Value a24.Read .cells(t,25).value=a24.Value a25.Read .cells(t,26).value=a25.Value a26.Read .cells(t,27).value=a26.Value a27.Read .cells(t,28).value=a27.Value a28.Read .cells(t,29).value=a28.Value a29.Read .cells(t,30).value=a29.Value a30.Read .cells(t,31).value=a30.Value a31.Read .cells(t,32).value=a31.Value a32.Read .cells(t,33).value=a32.Value a33.Read .cells(t,34).value=a33.Value a34.Read .cells(t,35).value=a34.Value a35.Read .cells(t,36).value=a35.Value a36.Read .cells(t,37).value=a36.Value a37.Read.cells(t,38).value=a37.Value a38.Read.cells(t,39).value=a38.Value a39.Read.cells(t,40).value=a39.Value a40.Read.cells(t,41).value=a40.ValueEnd WithNextobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//SAVE子程序//保存文件//读出系统时间,把文件保存为以日期为文件名的文件//每周日的23:59:10执行一次Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim sheetname,usernameDim tagdayDim i,j,tDim msgDim patch,fnfn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))+C Str(Hour(Now))&CStr(Minute (Now))patch="c:\"&fn&".xls"sheetname="Sheet1"Set objExcelApp=CreateObject("Excel.Application")objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activateobjExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//delete子程序//删除模版,拷贝空白模版到当前目录//有人会问,为什么不用vb清空当前已经记录数据的模版文件//问的好,如果这个模版里面已经存了几万条数据了呢?//所以最快的方法是用vc脚本,将当前模版删除,拷贝一个空的模版到c://每周日的23:59:30执行一次#include "apdefap.h"int gscAction( void ){#pragma option(mbcs)// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END#pragma code("kernel32.dll")long CopyFileA(LPCTSTR,LPCTSTR,long);long DeleteFileA(LPCTSTR);#pragma code()DeleteFileA("C:\\Table.xls");CopyFileA("C:\\bak\\Table.xls","C:\\Table.xls",TRUE);// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_END return 0;}。
WINCC+用户归档+VBS+EXCEL实时报表
ExcelApp.Quit
Set ExcelApp= Nothing
Exit For
End If
Next
End If
'************************Report waiting massgae***************************
Dim fso,folder
Dim type1
Dim patch,filename
Dim testposition,testnumber,startdate,printdate,brand,tyremodel,rim,tread,condition,load,speed,pressure,status
Dim objExcelApp,objExcelBook,objExcelSheet
On Error Resume Next
Dim ExcelApp,ExcelBook
Set ExcelApp = GetObject(,"Excel.Application")
If TypeName(ExcleApp) = "Application" Then
objExcelApp.Cells(n,10).Value=oRs.Fields(10).Value
objExcelApp.Cells(n,11).Value=oRs.Fields(11).Value
objExcelApp.Cells(n,12).Value=oRs.Fields(12).Value
startdate.Read
objExcelApp.cells(6,3).value=startdate.value
21.Wincc控件制作报表以及导出EXCEL方法介绍
21.Wincc控件制作报表以及导出EXCEL⽅法介绍假设希望做这样⼀个报表界⾯,可以根据⽇期查询:希望导出的excel报表⽂件在C盘根⽬录,是这个样⼦:接下来我们⼀步步实现这个功能。
1. Wincc历史趋势的数据库表结构有点不好理解,我们新建⼀个数据库名字叫做Report,新建⼀张表,结构是这个样⼦:注意开放sa⽤户,设置sa⽤户有管理report数据库权限,使⽤sql登陆模式。
2. 我们每5秒往report表写⼊⼀条记录,在全局VBS脚本写⼊如下代码:Option ExplicitFunction action'添加纪录Dim T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2Dim ors,conn,con,ssql,ocomDim PCNamePCName=hmiruntime.Tags("@LocalMachineName").ReadT1=HMIRuntime.Tags("温度1").ReadT2=HMIRuntime.Tags("温度2").ReadP1=HMIRuntime.Tags("压⼒1").ReadP2=HMIRuntime.Tags("压⼒2").ReadF1=HMIRuntime.Tags("流量1").ReadF2=HMIRuntime.Tags("流量2").ReadL1=HMIRuntime.Tags("液位1").ReadL2=HMIRuntime.Tags("液位2").ReadA1=HMIRuntime.Tags("分析仪1").ReadA2=HMIRuntime.Tags("分析仪2").ReadS1=HMIRuntime.Tags("转速1").ReadS2=HMIRuntime.Tags("转速2").Readcon="Provider = SQLOLEDB.1;password = sa;user id = sa;Initial Catalog =Report;Data Source = " & PCName & "\WINCC" Set conn=CreateObject("ADODB.Connection")conn.ConnectionString=conconn.Cursorlocation=3conn.openssql="insert into Report(CurDateTime,T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2) values(Getdate()," _& T1 & "," & T2 & "," & P1 & "," & P2 & "," & F1 & "," & F2 & "," & L1 & "," & L2 & "," & A1 & "," & A2 & "," & S1 & "," & S2 & ")"Set ors=CreateObject("ADODB.RecordSet")Set ocom=CreateObject("mand")Set ocom.activeconnection=connmandType=1mandText=ssqlSet ors=ocom.ExecuteSet ors=Nothingconn.closeSet conn=NothingEnd Function脚本中的函数不做解释。
WinccV7.3 使用VBS脚本读取excel文件数值
WinccV7.3使用VBS脚本读取excel文件数值案例:wincc项目路径下有一个excel文件,数据表sheet1内容如下:现在我们需要把这个文件中的数据读取出来,显示在输入输出域当中,本例以读取R1C1和R2C2为例。
在wincc页面上放置两个输入输出域,名字分别为R1C1和R2C2,R1C1数据类型为字符串,R2C2数据类型为十进制数,页面上放置一个按钮,用于读取数据。
wincc新建一个内部变量path,用于存放excel文件的路径。
在wincc 页面打开事件中写入一下VBS脚本。
Sub OnOpen()Dim pathSet path=hmiruntime.Tags("path")path.write HMIRuntime.ActiveProject.Path & "\myxls.xlsx"End Sub在按钮的点击事件中写入以下脚本:Sub OnClick(Byval Item)Dim xlApp,xlBook,pathDim r1c1,r2c2Set r1c1=ScreenItems("r1c1")Set r2c2=ScreenItems("r2c2")path=HMIRuntime.Tags("path").ReadSet xlApp=CreateObject("excel.application")xlApp.Visible=FalsexlApp.Workbooks.Open pathxlApp.Worksheets("Sheet1").Activater1c1.outputvalue= xlApp.Worksheets("Sheet1").cells(1,1).valuer2c2.outputvalue= xlApp.Worksheets("Sheet1").cells(2,2).valuexlApp.Workbooks.ClosexlApp.QuitSet xlApp=NothingEnd Sub经测试可以实现需要的功能。
如何能在Excel中访问WinCC变量归档大数据
1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。
2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack 提供的OLE-DB接口才能够解压并读取这些数据。
3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。
建议使用WinCC系统变量“@DatasourceNameRT”获得当前的Catalog。
Data Source :服务器名称本地:“.\WinCC”或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID orValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\Value_Name”,可以使用多个名称。
TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。
如何实现wincc用VBS做报表
tagDSNName.Read
Set LocalBeginTime = HMIRuntime.Tags("strBeginTime")ﻫLocalBeginTi.Read
Set LocalEndTime = HMIRuntime.Tags("strEndTime")
当使用 OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中Catalog为WinCC运行数据库的名称, 当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。建议使用WinCC内部变量 “@DatasourceNameRT” 获得当前项目的Catalog。Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。
ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]ﻫ其中:
ValueID:过程值归档变量的唯一标识符。
ValueName:过程值归档变量的名称,格式为“ArchiveName\Value_Name”,可以使用多个名称。
TimeBegin,TimeEnd:时间范围,格式 “YYYY-MM-DD hh:mm:ss.msc”。
2软件环境ﻫWindows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007
wincc与access形成EXCEL报表的实现(自己写的)
使用wincc、access、excel生成生产报表,希望对大家有所帮助!Excel需要安装datetime控件Excel的使用:在Excel表格中,将每个工位分为一个表格来用,右击底部表格,查看代码。
在代码段,将数据库的实际存放路径相对应。
如需该表头,在底部的表格value后边括号中修改。
在wincc中打开excel文件的方法:ProgramExecute("D:\\Program Files\\Microsoft Office\\OFFICE11\\excel.exe D:\\大自然报表.xls");//说明:双引号里边有两部分路径组成(execel安装路径、excel表格文件所在路径)路径之间//有空格隔离;路径阶层有双斜杠(\\)隔离。
Wincc中用于向access形成的数据源存储数据脚本程序:数据库:wincce; 表3;ODBC名称:wincce1A:B计量泵电流1B:B计量泵频率设置1C:B计量泵频率1D:A计量泵电流1E:A计量泵频率设置1F:A计量泵频率程序:Dim objConnectionDim strConnectionStringDim a,b,c,d,e,f,g,h,i,j,kDim strSQLDim objCommandstrConnectionString = "Provider=MSDASQL;DSN=wincce;UID=;PWD=;"a = HMIRuntime.Tags("B计量泵电流").Readb = HMIRuntime.Tags("B计量泵频率设置").Readc = HMIRuntime.Tags("B计量泵频率").Readd = HMIRuntime.Tags("A计量泵电流").Reade = HMIRuntime.Tags("A计量泵频率设置").Readf = HMIRuntime.Tags("A计量泵频率").ReadstrSQL = "INSERT INTO 表 3 (时间,1A,1B,1C,1D,1E,1F) VALUES (Now(),"&a&","&b&","&c&","&d&","&e&","&f&");"Set objConnection = CreateObject("ADODB.Connection")objConnection.ConnectionString = strConnectionStringobjConnection.OpenSet objCommand = CreateObject("mand")With objCommand.ActiveConnection = objConnection.CommandText = strSQLEnd WithobjCommand.ExecuteSet objCommand = NothingobjConnection.CloseSet objConnection = NothingExcel中用于对数据进行通讯的VBA程序Dim sstart, sstop, bstart, btop As StringPublic Function a()'首先引用ado --------- 點“工具-引用”再找到Microsoft ActiveX Date Objects X.X LibraryWorksheets("蒸馏塔2").StandardWidth = 14Worksheets("蒸馏塔2").Columns.Font.Size = 8Dim YEAR, MONTH, DAY As StringDim conn As New ADODB.ConnectionDim connstr As StringDim db As StringDim rs As New ADODB.RecordsetDim i, j As Long, rowa As Longdb = "D:\winccb.mdb"connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbOn Error Resume Nextconn.Open connstrrs.Open "select * from 表3 where 时间between #" & DTPicker1.Value & "# and #" & DTPicker2.Value & "# ", conn, 1, 3If rs.EOF Or rs.BOF ThenMsgBox "It is nothing."Elserowa = 3Worksheets("蒸馏塔2").Cells(2, 1).Value = "时间"Worksheets("蒸馏塔2").Cells(2, 2).Value = "测取泵流量"Worksheets("蒸馏塔2").Cells(2, 3).Value = "测取泵流量"Worksheets("蒸馏塔2").Cells(2, 4).Value = "E603温度"Worksheets("蒸馏塔2").Cells(2, 5).Value = "E504温度"Worksheets("蒸馏塔2").Cells(2, 6).Value = "E501温度"Worksheets("蒸馏塔2").Cells(2, 7).Value = "蒸馏塔冷却器温度"Worksheets("蒸馏塔2").Cells(2, 8).Value = "蒸馏塔回流流量"Do Until rs.EOFFor j = 0 To rs.Fields.CountWorksheets("蒸馏塔2").Cells(rowa, j).Value = rs(j - 1)Next jrowa = rowa + 1rs.MoveNextLoopEnd IfEnd FunctionPrivate Sub CommandButton1_Click() aEnd SubPrivate Sub CommandButton2_Click() Worksheets("蒸馏塔2").Cells.Clear End Sub。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因为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示例):/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.*" %><html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns="/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=GB2312"><meta name=ProgId content=Word.Document><meta name=Generator content="Microsoft Word 9"><meta name=Originator content="Microsoft Word 9"><title>用户信息</title><!--[if gte mso 9]><xml><o:DocumentProperties><o:Author>evan zhao</o:Author><o:LastAuthor>evan zhao</o:LastAuthor><o:Revision>1</o:Revision><o:TotalTime>1</o:TotalTime><o:Created>2003-08-20T16:26:00Z</o:Created><o:LastSaved>2003-08-20T16:27:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Company>taiping</o:Company><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:Version>9.2812</o:Version></o:DocumentProperties></xml><![endif]--><!--[if gte mso 9]><xml><w:WordDocument><w:PunctuationKerning><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:Compatibility><w:SpaceForUL><w:BalanceSingleByteDoubleByteWidth><w:DoNotLeaveBackslashAlone><w:ULTrailSpace><w:DoNotExpandShiftReturn><w:AdjustLineHeightInTable><w:UseFELayout></w:Compatibility></w:WordDocument></xml><![endif]--><style><!--/* Font Definitions */@font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"\@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}/* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}/* Page Definitions */@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;}--></style></head><body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'><div class=Section1 style='layout-grid:15.6pt'><table border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;mso-padding-alt:0cm 5.4pt 0cm 5.4pt'> <tr><td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>用户名</span></p></td><td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'> <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>真实姓名</span></p></td><td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'> <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>性别</span></p></td><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");String url="jdbc:odbc:mydb";//连接mydb数据库Connection con=DriverManager.getConnection (url, "", "");try{Statement stmt=con.createStatement();//查询employee表ResultSet rs=stmt.executeQuery("select user_name, real_name, gender from employee ");while(rs.next()){%><tr><td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'> <p class=MsoNormal><span lang=EN-US><%=rs.getString("user_name")%></span></p></td><td width=189 valign=top style='width:142.05pt;border-top:none;border-left:none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'><%=rs.getString("real_name")%></span></p></td><td width=189 valign=top style='width:142.05pt;border-top:none;border-left:none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'><%=rs.getString("gender")%></span></p></td></tr><%} // end whilers.close();stmt.close();} finally {con.close();}</table><p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>。