Wincc V7.3 采集excel文件数据填入Microsoft Hierarchical Flexgrid

合集下载

利用PLC实现Wincc与EXCEL对现场数据的采集【完整版】

利用PLC实现Wincc与EXCEL对现场数据的采集【完整版】

利用PLC实现Wincc与EXCEL对现场数据的采集【完整版】(文档可以直接使用,也可根据实际需要修订后使用,可编辑放心下载)利用PLC实现Wincc与EXCEL对现场数据的采集〔叶新林邓权张志华〕1.引言随着计算机硬件和软件技术的开展及工业自动化与企业信息化程度的不断提高,大量的计算机被应用于现场设备的控制和现场数据的采集中。

同时各种控制和监控软件不断的产生和更新,各种控制系统之间的数据通讯与资源共享越来越多地被使用,一时间呈现出“百家争鸣〞的现象。

在目前的工控软件中根本上都会提供DDE效劳器或OPC(OLE forProcess Control),使用户只需开发出符合自己要求的客户端软件即可实现实时数据的存取与分析。

一般供给商所提供的样例程序均为VB编写,但编程人员更多使用的是VC、DELPHI等编程软件,而对于普通的计算机应用者来说,这需要花很多的时间和精力去学习太多的编程语言,为此我们在对西门子Wincc的学习、研究、应用中,选用了Wincc中的DDE实时数据采集方法。

将采集的数据存入EXCEL中,采用两台服备器及现场客户机方式,通过DEBackup 定时备份软件,通过数据采集效劳器定时将数据备份到数据备份效劳器中。

各客户机安装Wincc监控软件,负责数据的显示、归档、查询、各班别之间的交班操作、清零等工作。

此方法简单,不需要学习很多语言,只要对EXCEL熟悉,并学会一点EXCEL中的VBA编程就能将PLC中的现场数据采集到办公系统中,实现数据的自动统计、分析、汇总等操作。

2.功能说明2.1数据采集硬件配置网络图系统由光纤工业以太网连结,各系统之间既互相独立又互相联系。

2.2采集/备份服备器采集/备份服备器以windowsXP系统作为操作系统、wincc6.0为现场PLC数据采集系统、excel为现场数据处理系统、DEBackup为现场数据备份系统,现场数据通过工业以太网,以OSI协议,通过Wincc采集,经excel处理,DEBackup 备份进入计算机硬盘中,为用户提供可靠数据。

如何在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\Value_Name”,可以使用多个名称。

TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。

由EXCEL文件导入PLC模块的操作方法

由EXCEL文件导入PLC模块的操作方法

宽度 以下项之间的距离 每个图形的阶梯数 每个阶梯的横档数
横档间距 I/O 启动时跳过横档计数 抑制 信号箭头样式
模块 PLC 图形样式
输入距中性点的偏移值
输出距热母线的偏移值
z X 区域:与 X-Y 网格类似,但没有 Y 轴。在 X 区域设置对话框中,可以设置图 形的水平标签、间距和原点。
提示 如果希望区域参考原点在图形的右 侧,请使用负的区域间距值。
注意 确保您的模板不包含任何现有阶梯。
保存
将要重复使用的电子表格信息保存在 .wdi 文件中。保存新 .wdi 文件后,将重新显示“电子表格到 PLC I/O 实用程序”对话框,新 .wdi 文件名将显示在“设置”编辑框中。
电子表格/表格列
显示用于查看并将电子表格列映射到 PLC 模块符号上属性的“电子表格到 PLC I/O 图形生成器”对话 框。
图形模板
您可以强制此工具使用用于新图形的特定模板。输入含完整路径的模板图形文件名,或单击“浏览”以搜
索现有模板(这样将在保存所有用户图形模板的 AutoCAD 模板文件夹中进行搜索)。对于当前默认模 板,将保留该值为空。如果您不想使用模板图形,请在编辑框中输入一个圆点。
指定输入模块插入偏移距离(垂直阶梯 方向 – 沿右侧垂直母线的 +X 方向测量 的值,水平阶梯方向 – 沿下部水平母线 的 +Y 方向测量的值)。
指定输出模块插入偏移距离(垂直阶梯 方向 – 沿左侧垂直母线的 -X 方向测量 的值,水平阶梯方向 – 沿上部水平母线 的 -Y 方向测量的值)。
注意 如果无法确定模块类型,或者模块 类型为输入和输出的组合,则会将模块 插入阶梯中部。
A B
C
2. 在“电子表格到 PLC I/O 实用程序”对话框中,单击“设置”。

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

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,rowsDim xlapp,objsheetDim i,j,k,m,n,filenameSet UA=ScreenItems("UA")Set rows=UA.GetRowCollectionm=rows.Countn=UA.ColumnCountIf m>1 Then '如果用户归档控件有记录Set xlapp=CreateObject("Excel.Application")xlapp.visible=Falsexlapp.workbooks.addSet objsheet=xlapp.worksheets(1)For k=1 To nua.ColumnIndex=kobjsheet.cells(3,k)=ua.ColumnCaption '字段名称Nextobjsheet.cells(1,1)="XX用户归档"For i=1 To mFor j= 1 To nobjsheet.cells(i+3,j)=ua.GetRow(i).celltext(j)NextNext'以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版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 = 3objsheet.range("a3:d" & CStr(3+m)).borders(1).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(1).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(2).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(2).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(3).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(3).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(4).linestyle=9objsheet.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"xlapp.Activeworkbook.saveas (filename) xlapp.workbooks.closexlapp.quitMsgbox "成功导出到C:\"ElseMsgbox "用户归档没有记录"End IfEnd Sub。

如何在Excel中访问WinCC变量归档数据

如何在Excel中访问WinCC变量归档数据
图8:打开VBA编辑器
2)创建读取WinCC历史数据的VBA子程序get_wincc_data:
图9:get_wincc_data
脚本包括以下几部分:
(1)获得WinCC运行数据库名称
以上脚本只能读取本地WinCC的变量值,并且需要插入“WinCC HMIRuntime 1.0 Type Library”对象:
Data Source :服务器名称
本地:“。\WinCC” 或者 “〈计算机名称>\WinCC”
远程:“<计算机名称〉\WinCC”
3。2 查询语句
“TAG:R,〈ValueID or ValueName〉,〈TimeBegin〉,<TimeEnd>[,〈SQL_clause>][,〈TimeStep〉]"
图14:运行结果
DEMO程序请参考附件中的report_demo_local。xls( 31 KB ) 文件。
5 远程计算机访问
Excel访问远程计算机WinCC的历史数据,需要注意:
5。1 OLE—DB接口
如果客户端计算机没有安装WinCC或者DataMonitor软件,则需要安装Connectivity Pack软件来提供OLE—DB接口。
图10:插入“WinCC HMIRuntime 1。0 Type Library"对象
(2)创建连接字符串:
(3)转换查询时间为UTC时间:
(4)四个参数值的查询(以查询“进口温度"为例):
4。2。3调用脚本
在时间控件Change事件中调用子程序get_wincc_data :
4。2.4运行Excel中的脚本
首先要设置宏的安全性为“中"或“低”(不建议使用):

WinCC和EXCEL数据传递

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”图12、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中:“电脑名称”为空;“应用程序”为excel;“主题”为[]工作表名,比方[DDE.xls]sheet1。

图23、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比方r1c1〔表示第一行第一列的单元格〕,重复步骤3可以加入更多的DDE变量图34、Excel程序图4Wincc程序图55完成用OPC做比较省事。

WinCC做OPC Server,Excel做OPC Client。

这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。

对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。

电脑〔PC〕上安装适当的通讯卡〔不同的通讯卡支持的通讯协议不同〕。

怎么才能把Excel里面的数据导入WINCC中

怎么才能把Excel里面的数据导入WINCC中

按照你的思路,在下就提供一些东西给你参考一下吧!1、你可以先做一个SetPointToPLC.xls文件,把你要设定的数据写到这个excel文件里面,保存到D盘的根目录里面。

如下图:2、在你WinCC画面上做个按钮,在这个按钮的鼠标事件里面写点C脚本:如下#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma code("Shell32.dll")//调用动态链接库__object* pExcel = NULL; //建立pExcel 指针用来对EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统- ");pExcel = __object_create("Excel.Application");//pExcel->Visible = 0;//控制excel文件是否可见,当1时,excel文件可见.pExcel->Workbooks ->Open ("d:\\SetPointToPLC.xls");SetTagFloat("NewTag1",pExcel->Worksheets("sheet1")->Range("B2")->V alue);//将excel文件B2里面的内容写到外部变量NewTag1SetTagFloat("NewTag2",pExcel->Worksheets("sheet1")->Range("B3")->V alue);//将excel文件B3里面的内容写到外部变量NewTag2//如果要增加写到PLC里面的变量,在这里添加上面类似的语句。

WinCC VBS利用EXCEL调用Windows API函数

WinCC VBS利用EXCEL调用Windows API函数

WinCC VBS利用EXCEL调用Windows API函数1. 简单举例在API.XLS的Sheet1中加入如下代码:Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByValYourGuess As Long) As LongPublic Sub ShowShutDownDlg() '显示关机界面SHShutDownDialog 0End Sub在WinCC调用之前先用EXCEL运行一下,效果如下:接下来由WinCC的VBS调用如下:Dim oExcelFile,oExcel,oWorkBook,oSheetoExcelFile= HMIRuntime.ActiveProject.Path + "APIXLSAPI.XLS" Set oExcel = CreateObject("Excel.Application")Set oWorkBook = oExcel.workbooks.OPen(oExcelFile)Set oSheet = oWorkBook.Sheets("Sheet1")oExcel.run "Sheet1.ShowShutDownDlg"oWorkBook.CloseSet oWorkBook = NothingoExcel.quitSet oExcel = nothing效果和EXCEL中是一模一样的,^_^。

2. 如何传递参数,和取得返回值但大多数时候我们需要调用一些API函数,传递某些值来获取返回值,比如FindWindow。

oExcel.run传递参数是可以的,比如EXCEL有宏:Public Sub TestMsg(Msg As String)MsgBox MsgEnd Sub那么调用的时候用oExcel.run "Sheet1. TestMsg",”TEST MSG H ERE” 即可。

wincc的excel报表实例

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>。

将WinCC的历史数据写入Excel文件

将WinCC的历史数据写入Excel文件

将WinCC的历史数据写入Excel文件最近,几个客户提到了一个共性的需求:定期将WinCC的历史归档数据导出到Excel文件中,供第三应用去访问。

实现这个需求的方法很多,如:1)通过IDB(Industrial Databridge工业数据桥选件), 通过简单的组态就能实现,操作视频链接:/xxym.aspx?id=124622)手动点击画面中的表格或趋势控件上的导出按钮,将数据导出;或通过定期(如每小时)执行全局脚本控制表格或趋势控件上的导出按钮导出数据。

核心VBS代码如下:TableControl1.Online = 0 '设置表格控件停止实时更新TableControl1.TimeColumnRangeType=1'设置表格控件时间范围为“开始到结束”TableControl1.TimeColumnBeginTime=XXX'设置表格控件的开始时间TableControl1.TimeColumnEndTime=YYY'设置表格控件的结束时间TableControl1.ExportShowDialog=False'取消表格控件导出时弹出对话框TableControl1.ExportDirectoryname=BBB'设置导出的目录TableControl1.ExportFilename=AAA'设置导出的文件名TableControl1.Export()'执行表格控件的导出动作注意:此种方式,控件所在画面要为当前运行画面或用全局脚本将其置为当前画面,否则全局脚本无法操作此控件。

3)通过脚本调用WinCC OLE DB接口直接读取历史数据,写入到Excel文件中----------------------------------------------这里重点介绍第3)种:VBS访问WinCC OLE DB接口读取历史数据,写入Excel(Connectivitypack连通包提供此接口)这种方式核心代码包括A和B这2部分A. 调用WinCC OLE DB接口读取历史数据核心代码及注解:A1. 查询归档数据scon='Provider=WinCCOLEDBProvider.1;Catalog=CC_test03 _20_06_12_17_50_01R;Data Source=.\WinCC''建立到归档数据库的连接字符串'Catalog为WinCC数据库的名称(内部系统变量@DatasourceNameRT的值),Data Source为服务器名称,本地用“.\WinCC”即可。

搬家第四天-91.WinccV7.3使用用户归档实现报表1-用户归档+Activex控件

搬家第四天-91.WinccV7.3使用用户归档实现报表1-用户归档+Activex控件

搬家第四天-91.WinccV7.3使⽤⽤户归档实现报表1-⽤户归档+Activex控件曾经写过⼀篇博客,记录使⽤MSHFGrid控件⽣成报表以及导出到excel的⽅法,⾥⾯有⼀段VBS脚本是定期把变量值存⼊⼀个⾃定义的sql 数据表,然后在MSHFGrid显⽰查询到的记录集,最后把MSHFGrid结果导出到excel中。

使⽤⽤户归档后,实际上定期存⼊变量值这⼀步可以变得更加简单,不需要写那么多sql脚本了,重点控制好id=-1和job=6就⾏了。

本⽂简单介绍⽤户归档结合MSHFGrid控件实现报表的⽅法。

我们假设下位机已经设置完毕并且变量已经上载到Wincc。

1. 先定义和配置⼀个⽤户归档,具体⽅法参考其他博客。

2. 由于没有实际硬件,我们可以使⽤随机函数的⽅法模拟产⽣现场来的数据,随机函数可以写在项⽬模板⾥⾯,具体⽅法参考其他博客。

3. 新建vbs全局动作,把随机函数赋给各变量Option ExplicitFunction actionDim FT101,FT102,FT103,PT101,PT102,PT103,TT101,TT102,TT103,LT101,LT102,LT103Set FT101=HMIRuntime.Tags("S7$程序(1)/FT101")Set FT102=HMIRuntime.Tags("S7$程序(1)/FT102")Set FT103=HMIRuntime.Tags("S7$程序(1)/FT103")Set PT101=HMIRuntime.Tags("S7$程序(1)/PT101")Set PT102=HMIRuntime.Tags("S7$程序(1)/PT102")Set PT103=HMIRuntime.Tags("S7$程序(1)/PT103")Set TT101=HMIRuntime.Tags("S7$程序(1)/TT101")Set TT102=HMIRuntime.Tags("S7$程序(1)/TT102")Set TT103=HMIRuntime.Tags("S7$程序(1)/TT103")Set LT101=HMIRuntime.Tags("S7$程序(1)/LT101")Set LT102=HMIRuntime.Tags("S7$程序(1)/LT102")Set LT103=HMIRuntime.Tags("S7$程序(1)/LT103")FT101.Write MyRnd(100,200)FT102.Write MyRnd(110,220)FT103.Write MyRnd(120,230)PT101.Write MyRnd(100,200)PT102.Write MyRnd(110,220)PT103.Write MyRnd(120,230)TT101.Write MyRnd(100,200)TT102.Write MyRnd(110,220)TT103.Write MyRnd(120,230)LT101.Write MyRnd(100,200)LT102.Write MyRnd(110,220)LT103.Write MyRnd(120,230)End Function4. 新建全局动作,把数据定期存⼊⽤户归档数据表Option ExplicitFunction actionDim CurDate,CurTimeDim id,jobSet CurDate=HMIRuntime.Tags("CurDate")Set CurTime=HMIRuntime.Tags("CurTime")Set id=HMIRuntime.Tags("@UA_ID")Set JOB=HMIRuntime.Tags("@UA_JOB")CurDate.Write Date()CurTime.Write Time()id.Write -1job.Write 6End Function5. 画⾯上放⼀个DTPicker控件,名字修改为DTP,放⼀个MSHFGrid控件,名字修改为Report,放⼀个按钮,按钮⿏标点击VBS脚本为Sub OnClick(ByVal Item)Dim DT,Report,DBName,PCNameDim conn,ssql,ors,ocom,sconDim sYear,sMonth,sDay,sDateSet DT=ScreenItems("DTP")Set Report=ScreenItems("Report")Set DBName=HMIRuntime.Tags("@DatasourceNameRT")Set PCName=HMIRuntime.Tags("@LocalMachineName")sYear=Year(DTP.Value)sMonth=Month(DTP.Value)sDay=Day(DTP.Value)sDate=sYear & "/" & sMonth & "/" & sDay'Msgbox sDatescon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog ='" _& DBName.Read & "';Data Source = " & PCName.Read & "\WINCC"ssql="select Curdate as '⽇期',Curtime as '时间',FT101 as '流量1',FT102 as '流量2',FT103 as '流量3'," _& "PT101 as '压⼒1',PT102 as '压⼒2',PT103 as '压⼒3',TT101 as '温度1',TT102 as '温度2',TT103 as '温度3'," _ & "LT101 as '液位1',LT102 as '液位2',LT103 as '液位3' from UA#UA where Curdate='" & sDate & "'"Set conn=CreateObject("ADODB.Connection")conn.ConnectionString=sconconn.Cursorlocation=3conn.openSet ors=CreateObject("ADODB.RecordSet")Set ocom=CreateObject("mand")mandtype=1Set ocom.ActiveConnection=connmandText=ssqlSet ors=ocom.ExecuteSet Report.DataSource=orsReport.RefreshSet ors=Nothingconn.closeSet conn=NothingEnd Sub从MSHFGrid控件导出到Excel的脚本就不在这⾥写了,请参考其他的博客。

Wincc过程变量写入EXCEL

Wincc过程变量写入EXCEL

Wincc过程变量写入EXCEL 如何使写入一个数据后在下一行写入第二个。

Wincc 5.1c脚本下面是我找到的回答不论是行号还是列号,都可以用变量值替换。

注意,Range()的表达方式除了"C3"这种形式外,还可以用Cells(Row,Col)来表示。

long int iRow;char sRange[10];sprintf(sRange,"C%d",iRow);pExcel->Worksheets("sheet1")->Range(sRange)->Value=12;根据数据的变化自动换行有人说利用全局变量触发条件选为变量只要设置了触发条件就能实现吗?取之于“民”用之于“民”,几段代码,希望对后来者有帮助,不要见笑。

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表示用的是office2000pExcel->Visible =0;pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\JILU.xls");//Cells(row,col) pExcel->Worksheets("sheet1")->Cells(row,1)->Value=GetTagWord("记数根数");pExcel->Worksheets("sheet1")->Cells(row,2)->Value=GetTagChar("开始时间");pExcel->Worksheets("sheet1")->Cells(row,3)->Value=GetTagWord("1#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,4)->Value=GetTagFloat("1#水箱流量记录");pExcel->Worksheets("sheet1")->Cells(row,5)->Value=GetTagWord("2#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,6)->Value=GetTagFloat("2#水箱流量记录");pExcel->Worksheets("sheet1")->Cells(row,7)->Value=GetTagWord("3#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,8)->Value=GetTagFloat("3#水箱流量记录");pExcel->Worksheets("sheet1")->Cells(row,9)->Value=GetTagWord("4#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,10)->Value=GetTagWord("5#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,11)->Value=GetTagFloat("4#水箱流量记录");pExcel->Worksheets("sheet1")->Cells(row,12)->Value=GetTagWord("6#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,13)->Value=GetTagWord("7#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,14)->Value=GetTagFloat("5#水箱流量记录");pExcel->Worksheets("sheet1")->Cells(row,15)->Value=GetTagWord("8#高温计温度记录");pExcel->Worksheets("sheet1")->Cells(row,16)->Value=GetTagChar("系统时间");SetTagBit("钢温记录信号",0);}pExcel->ActiveWorkbook->Save;pExcel->Workbooks->Close();pExcel->Quit();__object_delete(pExcel);return 0;}2、存储脚本。

WinccV7.3使用VBS脚本读取excel文件数值

WinccV7.3使用VBS脚本读取excel文件数值

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).value xlApp.Workbooks.ClosexlApp.QuitSet xlApp=NothingEnd Sub经测试可以实现需要的功能。

wincc与EXCEL的连接

wincc与EXCEL的连接
No.
步骤
1
安装一个新“桥”:
在WinCC项目管理器中点击工业数据桥的弹出菜单中的“设置”项。
单击“新建”按钮。
选择连接名称,源类型(OPC数据访问)及目标类型(Excel)。
( 8 KB )
图01
在下一个对话框中选择源(OPCServer.WinCC)并且指定Excel文件的目标路径/名称。
( 9 KB )
图02
输入组名然后单击“完成”按钮。
( 9 KB )
图03
2
添加WinCC变量的连接:
单击“添加”按钮,将弹出“工业数据桥-连接设置”对话框。
在“设置源OPC项”窗口中选择一个变量。
在“设置目标Excel变量”窗口中为目标变量输入一个名称。
在右边窗口中输入连接名称。也可以通过“缺省连接名称”按钮自动生成连接名称。
单击“连接”按钮应用设置。重复这些步骤完成所有您所希望添加到Excel表格中变量组态。
( 49 KB )
图04
点击“OK”按钮关闭对话框。
保存当前组态文件。
3
当前中间结果:
( 32 KB )
图05
该组态现在不再需要,您可以关闭。
4
激活“工业数据桥运行系统”
在WinCC项目管理器中点击工业数据桥的弹出菜单中的“运行系统”项。
打开工击“连接”及“开始”按钮。
( 17 KB )
图06
数据将会被写入到Microsoft Excel文件中。

Wincc V7.3 vbs 读取多个变量归档数据到excel

Wincc V7.3 vbs 读取多个变量归档数据到excel

Wincc V7.3vbs读取多个变量归档数据到excel前面的一篇博客记录了如何读取多个变量归档数据到mshgrid控件,根据的是西门子官网的教学。

有网友询问为什么他照着官网方法就是无法导出到excel。

我自己也做了一遍,没有问题。

本篇主要记录导出按钮的脚本。

前面的准备工作与上一篇一致,导出按钮的vbs脚本如下:Sub OnClick(ByVal Item)Dim myCatalog,myDS,PCName,cnstr,sqlstr1,sqlstr2Dim xlapp,BTime,ETime,utcbtime,utcetime,utcbtstr,utcetstrDim conobj,rsobj1,comobj1Dim rsobj2,comobj2Dim rscount,i,curRowDim filenamemyCatalog=HMIRuntime.Tags("@DatasourceNameRT").ReadPCName=HMIRuntime.Tags("@LocalMachineName").ReadmyDS=PCName & "\Wincc"Set BTime=HMIRuntime.Tags("btime")Set ETime=HMIRuntime.Tags("etime")'北京时间时区修正utcbtime=Dateadd("h",-8,BTime.Read) '起始时间utcetime=Dateadd("h",-8,ETime.Read) '结束时间'日期时间格式修正utcbtstr = Year(utcbtime) & "-" & Month(utcbtime) & "-" & Day(utcbtime) & " " & Hour(utcbtime) & ":" & Minute(utcbtime) & ":" & Second(utcbtime)utcetstr = Year(utcetime) & "-" & Month(utcetime) & "-" & Day(utcetime) & " " & Hour(utcetime) & ":" & Minute(utcetime) & ":" & Second(utcetime)'连接字符串cnstr="Provider=WinCCOLEDBProvider.1; Catalog=" & myCatalog & "; Data Source=" &myDS'创建连接对象Set conobj=CreateObject("ADODB.Connection")conobj.connectionstring=cnstrconobj.CursorLocation = 3conobj.Open'查询字符串'sqlstr = "Tag:R,('VA\flow1';'VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'" sqlstr1 = "Tag:R,('VA\flow1'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"sqlstr2 = "Tag:R,('VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"'进行查询Set rsobj1 = CreateObject("ADODB.Recordset")Set comobj1 = CreateObject("mand")mandType = 1Set comobj1.ActiveConnection = conobjmandText = sqlstr1Set rsobj1 = comobj1.ExecuteSet rsobj2 = CreateObject("ADODB.Recordset")Set comobj2 = CreateObject("mand")mandType = 1Set comobj2.ActiveConnection = conobjmandText = sqlstr2Set rsobj2 = comobj2.Executerscount=rsobj1.recordcountrsobj1.movefirstrsobj2.movefirstif rscount=0 thenmsgbox "没有记录"exit subend ifSet xlapp=CreateObject("Excel.Application")xlapp.visible=Falsexlapp.workbooks.add'初始化excelxlapp.worksheets(1).cells(1,1)="编号:"xlapp.worksheets(1).cells(1,2)="QB-2017.001"xlapp.worksheets(1).range("a2:c2").mergecells=True '合并单元格xlapp.worksheets(1).cells(2,1)="这是一个测试"xlapp.worksheets(1).cells(2,1).HorizontalAlignment = 3 '文字居中xlapp.worksheets(1).cells(3,1)="日期时间"xlapp.worksheets(1).cells(3,2)="flow1"xlapp.worksheets(1).cells(3,3)="flow2"'导出到excelFor i=1 To rscountxlapp.worksheets(1).cells(3+i,1)=Dateadd("h",+8,rsobj1.fields(1).value)xlapp.worksheets(1).cells(3+i,2)=rsobj1.fields(2).valuexlapp.worksheets(1).cells(3+i,3)=rsobj2.fields(2).valuersobj1.movenextrsobj2.movenextNext'释放资源Set rsobj1 = NothingSet rsobj2 = Nothingconobj.CloseSet conobj = Nothing'画边框xlapp.worksheets(1).range("a3:c" & CStr(3+rscount)).borders(1).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(1).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).weight=2'保存文件filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成生产报表.xlsx"xlapp.Activeworkbook.saveas (filename)xlapp.workbooks.closexlapp.quitMsgbox "成功导出到C:\"End Sub无法导出数据的朋友,检查一下官网提示的那个连接包是否安装了。

使用Excel通过OPC访问WinCC的实时数据(工程师培训)

使用Excel通过OPC访问WinCC的实时数据(工程师培训)

使用Excel通过OPC访问WinCC的实时数据(工程师培训)摘要:OPC(OLE for process control)作为标准软件接口,可以使各个生产商的设备和应用程序就能以统一的方式连接起来。

WinCC既可以用作OPC服务器提供数据,又可以作为OPC客户机访问其他OPC服务器中的数据。

WinCC集成的OPC服务器使得过程数据可由其它应用程序(OPC客户机)访问。

在Excel中可以通过VBA脚本建立OPC客户端,并通过OPC接口读取WinCC中的数据,并将修改的数据写入WinCC。

关键词趋势曲线、函数趋势控件、XY轴、C脚本、VBS脚本1OPC规范及功能 (1)5在Excel中通过OPC DA访问本地WinCC (3)6在Excel中通过OPC DA远程访问WinCC (7)1OPC规范及功能OPC是一种一致的独立于制造商的软件接口。

OPC接口基于Microsoft Windows的COM(组件对象模型)和DCOM(分布式组件对象模型)技术。

另一方面,OPC XML则基于Internet 标准XML、SOAP和HTTP。

2COM功能COM是位于同一计算机上且属于不同程序的对象之间进行通讯时采用的标准协议。

服务端是提供服务的对象,比如提供数据。

客户端是使用由服务端提供的服务的应用程序。

3DCOMDCOM代表COM功能的扩展,从而允许对远程计算机上的对象的访问。

该接口允许在企业、管理办公室和生产的应用程序之间进行标准化的数据交换。

以前,访问过程数据的应用程序受限于通讯网络的访问协议。

使用OPC标准软件接口,各个生产商的设备和应用程序就能以一致的方式连接起来。

OPC客户端是访问过程数据、消息和OPC服务端归档历史数据的应用程序。

访问需要通过OPC软件接口。

OPC服务端是一个程序,它为不同制造商的应用程序提供一个标准的软件接口。

OPC服务端是在处理过程数据的应用程序、各种网络协议和用于访问这些数据的接口之间的中间层。

WinCC通过VBS的Excel文件操作

WinCC通过VBS的Excel文件操作

I S TAS
2/7
objFSO.CreateFolder "C:\Path"
1.3 拷贝文件夹 objFSO.CopyFolder "C:\Path" "C:\Path2" 1.4 移动文件夹 objFSO.MoveFolder "C:\Path" "C:\Path2" 1.5 删除文件夹 objFSO.DeleteFolder "C:\Path"
对象集合 集合 Columns Rows Dialogs Sheets
描述 表示活动工作簿中的列 表示活动工作簿中的行 Excel 程序中所有的对话框 指定或活动工作簿中所有的工作表
对象属性 属性 ActiveCell ActiveChart ActiveSheet ActiveWindow ActiveWorkbook RangeSelection Selection
提供包含在文件夹内的所有文件的列表。 包含用来创建、删除或移动文件夹的方法和属性,也用来 向系统询问文件夹名、路径和多种其他属性。 提供在 Folder 内的所有文件夹的列表。 用来读写文本文件。
FSO 包含在 Scripting 类型库中,因此访问 FSO 需要先使用下面代码创建 FSO 对象的一个 实例:
4.2 添加按钮 “Write xls ”,在按钮鼠标事件中加入如下脚本:
Dim xlApp, xlPath, xlFile, xlBook, xlSheet Dim i, t Dim objFSO, objFlexGrid, objProcessBar
'当前项目路径下如果不存在 \Excel 子目录则新建 Set objFSO = CreateObject("Scripting.FileSystemObject") xlPath = HMIRuntime.ActiveProject.Path & "\Excel" If Not objFSO.FolderExists(xlPath) Then objFSO.CreateFolder(xlPath)

关于如何使用WinCC Industrial Data Bridge将WinCC的实时数据记录到MS Access

关于如何使用WinCC Industrial Data Bridge将WinCC的实时数据记录到MS Access

关于如何使用WinCC Industrial Data Bridge将WinCC的实时数据通过OPC DA记录到MS Access、MS SQL Server和Oracle 数据库中1 WinCC Industrial Data Bridge简介1.1 功能WinCC/IndustrialDataBridge(工业数据桥)利用标准接口将自动化层(控制器)连接到IT世界,并保证了双向的信息流。

这些类型接口的例子包括自动化领域里的OPC 和IT世界内的SQL数据库。

你可利用众多不同的标准接口(其中包括OPC,SQL,OLE-DB,Office格式),将不同制造商生产的系统集成在一起。

你可在合宜定价的基础上,利用标准软件包完成系统组态(不需要编程)。

通常,带有OPC DA服务器接口的 WinCC是数据源,而一个外部数据库则是数据目的地。

取决于数据数量,授权可以128、 512、2K和10K个变量提供。

在不同的制造商生产的自动化系统之间,通过“IndustrialDataBridge” 进行数据交换(例如通过OPC)。

通过“ IndustrialDataBridge” 连接 OPC服务器能在不同设备数据源和目的地之间通讯。

∙通过OPC接口,可以连接由众多不同制造商生产的SCADA和监视系统。

∙将过程数据存储在Excel或Acces 等办公软件内。

也可集成数据库,以便归档大量数据。

∙SQL数据库可用作已采集到的生产数据目的地。

系统可在事件驱动基础上,使用OPC模块,从数据源传输数据,或者利用发送/接收模块直接从控制器传输数据。

∙应用一个数据库作为数据源,你可将配方或设定值直接传输到 WinCC或传输到一个控制器。

当这样做时,你可应用OPC DA数据访问,WinAC ODK或发送/接收模块作为到达数据目的地的接口。

1.2优点∙将自动化层连接到IT环境∙使用众多不同的标准接口(其中包括OPC,SQL,OLE-DB,Office 格式)集成由不同制造商生产的系统∙使用标准软件的简单、价格合理的组态(不需要编程)∙在几个系统之间同时进行高性能的数据交换2 使用WinCC Industrial Data Bridge将WinCC的实时数据通过OPC DA记录到Oracle数据库中1.1 WinCC Industrial Data Bridge支持Oracle 9i数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Wincc V7.3 采集excel文件数据填入Microsoft Hierarchical Flexgrid
案例:有时候我们需要将excel文件中数据采集出来存放入grid类型的控件进行显示,excel文件显示如下:
wincc页面放置一个按钮,用于弹出消息框显示行数;放置Microsoft Hierarchical Flexgrid控件,设置名称为MSHFlex。

wincc新建一个内部变量path,用于存放excel文件的路径。

在wincc页面打开事件中写入一下VBS脚本。

Sub OnOpen()
Dim path
Set path=hmiruntime.Tags("path")
path.writeHMIRuntime.ActiveProject.Path& "\myxls.xlsx"
End Sub
在按钮的点击事件中写入以下脚本:
Sub OnClick(ByVal Item)
Dim objflex,xlApp,xlBook,path,RowCount,ColCount
Dim i,j
Set objflex=ScreenItems("MSHFlex")
path=HMIRuntime.Tags("path").Read
Set xlApp=CreateObject("excel.application")
xlApp.Visible=False
xlApp.Workbooks.Open path
xlApp.Worksheets("Sheet1").Activate
RowCount=xlApp.Worksheets("Sheet1").usedrange.rows.count
ColCount=xlApp.Worksheets("Sheet1").usedrange.Columns.count
objflex.Cols=ColCount+1
objflex.Rows=RowCount
For i=1 To ColCount
objflex.TextMatrix(0,i)=xlApp.Worksheets("Sheet1").cells(1,i).value
Next
For i=2 To RowCount
For j=1 To ColCount
objflex.TextMatrix(i-1,j)=xlApp.Worksheets("Sheet1").cells(i,j).value
Next
Next
xlApp.Workbooks.Close
xlApp.Quit
Set xlApp=Nothing End Sub。

相关文档
最新文档