用vbs脚本读取excel表格附源代码
- 格式:docx
- 大小:18.16 KB
- 文档页数:5
VBS操作Excel常见方法dim oExcel,oWb,oSheetSet oExcel= CreateObject("Excel.Application")Set oWb = oExcel.Workbooks.Open("E:\其他\新装表.xls") Set oSheet = oWb.Sheets("Sheet1")MsgBox oSheet.Range("B2").Value '#提取单元格B2内容'.....3、如果是XP系统,可以使用如下代码Dim objFileDlgSet objFileDlg = CreateObject("UserAccounts.monDialog") objFileDlg.Filter = "Excel File (*.xls) |*.xls"If objFileDlg.ShowOpen Thenmsgbox "您选择的文件是:" & objFileDlg.FileName & vbCrLf End IfVBS控制Excel的一些常见方法:(一) 使用动态创建的方法首先创建 Excel 对象,使用Obj:oExcel = CreateObject( "Excel.Application" )1) 显示当前窗口:oExcel.Visible = True2) 更改 Excel 标题栏:oExcel.Caption = "应用程序调用 Microsoft Excel"3) 添加新工作簿:oExcel.WorkBooks.Add4) 打开已存在的工作簿:oExcel.WorkBooks.Open( "C:\Excel\Demo.xls" )5) 设置第2个工作表为活动工作表:oExcel.WorkSheets(2).Activate或oExcel.WorksSheets( "Sheet2" ).Activate6) 给单元格赋值:oExcel.Cells(1,4).Value = "第一行第四列"7) 设置指定列的宽度(单位:字符个数),以第一列为例:oExcel.ActiveSheet.Columns(1).ColumnsWidth = 58) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:oExcel.ActiveSheet.Rows(2).RowHeight = 1/0.035 ' 1厘米9) 在第8行之前插入分页符:oExcel.WorkSheets(1).Rows(8).PageBreak = 110) 在第8列之前删除分页符:oExcel.ActiveSheet.Columns(4).PageBreak = 011) 指定边框线宽度:oExcel.ActiveSheet.Range( "B3:D4" ).Borders(2).Weight = 31-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )12) 清除第一行第四列单元格公式:oExcel.ActiveSheet.Cells(1,4).ClearContents13) 设置第一行字体属性:oExcel.ActiveSheet.Rows(1) = "隶书"oExcel.ActiveSheet.Rows(1).Font.Color = clBlueoExcel.ActiveSheet.Rows(1).Font.Bold = TrueoExcel.ActiveSheet.Rows(1).Font.UnderLine = True14) 进行页面设置:a.页眉:oExcel.ActiveSheet.PageSetup.CenterHeader = "报表演示"b.页脚:oExcel.ActiveSheet.PageSetup.CenterFooter = "第&P页"c.页眉到顶端边距2cm:oExcel.ActiveSheet.PageSetup.HeaderMargin = 2/0.035d.页脚到底端边距3cm:oExcel.ActiveSheet.PageSetup.HeaderMargin = 3/0.035e.顶边距2cm:oExcel.ActiveSheet.PageSetup.TopMargin = 2/0.035f.底边距2cm:oExcel.ActiveSheet.PageSetup.BottomMargin = 2/0.035 g.左边距2cm:oExcel.ActiveSheet.PageSetup.LeftMargin = 2/0.035h.右边距2cm:oExcel.ActiveSheet.PageSetup.RightMargin = 2/0.035i.页面水平居中:oExcel.ActiveSheet.PageSetup.CenterHorizontally = 2/0.035 j.页面垂直居中:oExcel.ActiveSheet.PageSetup.CenterVertically = 2/0.035 k.打印单元格网线:oExcel.ActiveSheet.PageSetup.PrintGridLines = True15) 拷贝操作:a.拷贝整个工作表:ed.Range.Copyb.拷贝指定区域:oExcel.ActiveSheet.Range( "A1:E2" ).Copyc.从A1位置开始粘贴:oExcel.ActiveSheet.Range.( "A1" ).PasteSpeciald.从文件尾部开始粘贴:oExcel.ActiveSheet.Range.PasteSpecial16) 插入一行或一列:a. oExcel.ActiveSheet.Rows(2).Insertb. oExcel.ActiveSheet.Columns(1).Insert17) 删除一行或一列:a. oExcel.ActiveSheet.Rows(2).Deleteb. oExcel.ActiveSheet.Columns(1).Delete18) 打印预览工作表:oExcel.ActiveSheet.PrintPreview19) 打印输出工作表:oExcel.ActiveSheet.PrintOut20) 工作表保存:if not oExcel.ActiveWorkBook.Saved thenoExcel.ActiveSheet.PrintPreview21) 工作表另存为:oExcel.SaveAs( "C:\Excel\Demo1.xls" )22) 放弃存盘:oExcel.ActiveWorkBook.Saved = True23) 关闭工作簿:oExcel.WorkBooks.Close24) 退出 Excel:oExcel.Quit(二) 使用VBS 控制Excle二维图1)选择当第一个工作薄第一个工作表set oSheet=oExcel.Workbooks(1).Worksheets(1)2)增加一个二维图achart=oSheet.chartobjects.add(100,100,200,200)3)选择二维图的形态achart.chart.charttype=44)给二维图赋值set series=achart.chart.seriescollectionrange="sheet1!r2c3:r3c9"series.add range,true5)加上二维图的标题achart.Chart.HasTitle=Trueachart.Chart.ChartTitle.Characters.Text=" Excle二维图"6)改变二维图的标题字体大小achart.Chart.ChartTitle.Font.size=187)给二维图加下标说明achart.Chart.Axes(xlCategory, xlPrimary).HasTitle = Trueachart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "下标说明" 8)给二维图加左标说明achart.Chart.Axes(xlValue, xlPrimary).HasTitle = Trueachart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "左标说明" 9)给二维图加右标说明achart.Chart.Axes(xlValue, xlSecondary).HasTitle = Trueachart.Chart.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = "右标说明" 10)改变二维图的显示区大小achart.Chart.PlotArea.Left = 5achart.Chart.PlotArea.Width = 223achart.Chart.PlotArea.Height = 108如何用vbs把excel的单元格数据写到txt复制代码代码如下:If WScript.Arguments.Count > 0 Then Filename = WScript.Arguments(0)Set a = CreateObject("Excel.Application")If Filename = "" ThenFilename = a.GetOpenFilename("Excel Files (*.xls), *.xls")If VarType(Filename) = vbBoolean ThenMsgBox "Excel2Txt用于将Excel文件的每个Sheet保存为一个文本文件。
VBS连接EXCEL及其操作VBS(Visual Basic Script)是一种Microsoft基于Visual Basic所开发的一种脚本编程语言。
通过VBS可以连接Excel,并对Excel进行各种操作,包括读取、修改、创建和删除Excel文件,读取和修改Excel中的数据,设置单元格样式和格式等。
要连接Excel文件,需要先创建一个Excel对象,然后通过Excel对象打开指定的Excel文件。
以下是一个连接Excel并读取数据的示例代码:```Set excelApp = CreateObject("Excel.Application")Set excelWorkbook =excelApp.Workbooks.Open("C:\Path\To\ExcelFile.xlsx")Set excelWorksheet = excelWorkbook.Worksheets("Sheet1")rowCount = edRange.Rows.CountcolumnCount = edRange.Columns.CountFor i = 1 To rowCountFor j = 1 To columnCountvalue = excelWorksheet.Cells(i, j).ValueMsgBox "Cell (" & i & ", " & j & "): " & valueNextNextexcelWorkbook.CloseexcelApp.Quit```上述代码首先创建了一个Excel应用程序对象excelApp,并调用Open方法打开指定的Excel文件。
然后,获取指定的工作表对象excelWorksheet,并通过UsedRange属性获取数据的有效范围。
vbs条件查询表格在VBScript中进行条件查询表格可以通过使用ADO(ActiveX Data Objects)来实现。
首先,你需要创建一个连接到数据库的对象,然后使用SQL语句来查询表格并获取结果。
以下是一个简单的示例来说明如何在VBScript中进行条件查询表格:vbscript.' 创建连接对象。
Set conn = CreateObject("ADODB.Connection")。
' 设置连接字符串。
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;"' 打开连接。
conn.Open connStr.' 创建记录集对象。
Set rs = CreateObject("ADODB.Recordset")。
' 编写查询SQL语句。
sql = "SELECT FROM YourTable WHERE YourCondition = 'YourValue'"' 执行查询。
rs.Open sql, conn.' 循环遍历结果集。
Do Until rs.EOF.' 处理查询结果。
' 例如,输出查询结果到屏幕上。
WScript.Echo rs("ColumnName")。
' 移动到下一条记录。
rs.MoveNext.Loop.' 关闭记录集和连接。
rs.Close.conn.Close.在上面的示例中,你需要将代码中的"YourTable"替换为你要查询的表格名称,"YourCondition"替换为你的查询条件字段,"YourValue"替换为你的查询条件的值,"ColumnName"替换为你要获取的列名。
vbs读取格式-回复[VBS读取格式]是一种编程语言中非常重要的一部分,它使得开发者可以从各种文件中读取数据并进行处理。
无论是读取文本文件、Excel文件还是数据库文件,VBS都可以提供相应的功能来满足这些需求。
在本文中,我将为大家逐步介绍VBS读取不同格式的文件的方法,并分享一些实用的技巧和注意事项。
第一步:了解VBS的基础知识在开始学习VBS读取格式之前,我们需要对VBS有一定的了解。
VBS是Visual Basic Script的缩写,它是一种微软开发的脚本语言,主要用于Windows平台。
它的语法类似于Visual Basic语言,但比VB更加简洁和灵活。
学习VBS的基础语法并理解其主要特性,将有助于我们更好地理解后续的内容。
第二步:读取文本文件读取文本文件是最基本的文件读取操作之一。
VBS提供了一个内置对象FileSystemObject,我们可以使用它来操作文件系统。
以下是一个简单的示例代码,展示了如何使用VBS读取文本文件:vbs' 创建FileSystemObject对象Set fso = CreateObject("Scripting.FileSystemObject")' 打开文件Set file = fso.OpenTextFile("C:\path\to\file.txt")' 按行读取文件内容,并输出到控制台Do Until file.AtEndOfStreamline = file.ReadLineWScript.Echo lineLoop' 关闭文件file.Close在上面的示例中,我们首先创建了一个FileSystemObject对象,然后使用OpenTextFile方法打开了一个文本文件。
接着,我们使用ReadLine 方法按行读取文件内容,并通过WScript.Echo将其输出到控制台。
vbs之excel使⽤VBScript操作excel 打开excel及新建⼯作薄'' 2. Method'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 2.1 CreateObject Method' 语法:CreateObject(appname.objectType, [servename])' 解释:appname, 必要, Variant(字符串)。
提供该对象的应⽤程序名。
' objecttype, 必要,Variant。
带创建对象的类型或是类。
' servename,可选,Variant。
要在其上创建对象的⽹络服务器名称。
'' 说明:要创建ActiveX对象,只需将CreateObject返回的对象赋给⼀个对象变量:' 例⼦:Set oExcel = CreateObject("Excel.Application")' 声明⼀个对象变量,并使⽤动态创建⽅法创建该对象Dim oExcelSet oExcel = CreateObject("Excel.Application")' 1) 使Excel可见oExcel.Visible = true' 2) 更改Excel标题栏oExcel.caption = "qyx's vbs"' 3) 添加⼀个新的⼯作薄oExcel.workBooks.add' 4) 打开已存在的⼯作薄' oExcel.workbooks.open("d:\temp.xlsx")' 5) 设置第2个⼯作页为活动⼯作表oExcel.worksheets(2).activate' 或者' oExcel.worksheets("Sheet2").activate单元格赋值及基本操作' 6) 给单元格赋值oExcel.cells(1,1).value = "This is column A, row 1"' 7) 设置指定⾏的⾼度(单位:磅, 0.035cm)oExcel.activeSheet.rows(2).rowHeight = 1/0.035' 1cm' 8) 设置指定列的宽度(单位:字符个数)oExcel.activeSheet.columns(1).columnWidth = 5' 9) 在第8⾏之前插⼊分页符oExcel.worksheets(1).rows(8).pagebreak = 1' 10) 在第8列之前删除分页符oExcel.worksheets(1).columns(8).pagebreak = 0' 11) 指定边框线宽度' 说明:1-左 2-右 3-顶 4-底 5-\ 6-/oExcel.activeSheet.range("B3:D4").borders(5).weight = 3' 12) 清除第1⾏第4列单元格公式oExcel.activeSheet.cells(1,4).clearcontents' oExcel.activeSheet.cells(1,4).value = ""' 13) 设置第⼀⾏字体属性oExcel.activeSheet.rows(1) = "⿊体"oExcel.activesheet.rows(1).font.color = vbRedoExcel.activeSheet.rows(1).font.bold = trueoExcel.activesheet.rows(1).font.underLine = true页⾯设置' 14) 页⾯设置' a) 页眉oExcel.activeSheet.pageSetup.centerHeader = "报表演⽰"' b) 页脚oExcel.activeSheet.pageSetup.centerFooter = "第&P页"' c) 页眉到顶端边距2cmoExcel.activeSheet.pageSetup.headerMargin = 2/0.035' d) 页脚到底端边距3cmoExcel.activeSheet.pageSetup.footerMargin = 3/0.035 ' e) 顶边距2cmoExcel.activeSheet.pageSetup.topMargin = 2/0.035' f) 底边距2cmoExcel.activeSheet.pageSetup.bottomMargin = 2/0.035 ' g) 左边距2cmoExcel.activeSheet.pageSetup.leftMargin = 2/0.035' h) 右边距2cmoExcel.activeSheet.pageSetup.rightMargin = 2/0.035' i) 页眉⽔平居中oExcel.activeSheet.pageSetup.centerVertically = 2/0.035 ' k) 打印单元格⽹线oExcel.activeSheet.pageSetup.printGridLines = true拷贝及粘贴操作' 15) 拷贝与粘贴操作' a) 拷贝整个⼯作表' oExcel.activeSheet.copy ' 未测试' b) 拷贝指定区域oExcel.activeSheet.range("A1:E2").copy' c) 从A1位置开始粘贴oExcel.activeSheet.range("A1").pasteSpecial' d) 从⽂件尾部开始粘贴' oExcel.activeSheet.range.pasteSpecial '未测试' 16) 插⼊⼀⾏或⼀列oExcel.activeSheet.rows(2).insertoExcel.activeSheet.columns(1).insert' 17) 删除⼀⾏或⼀列oExcel.activeSheet.rows(2).deleteoExcel.activeSheet.columns(1).delete打印及预览' 18) 打印预览⼯作表oExcel.activeSheet.printPreview' 19) 打印输出⼯作表oExcel.activeSheet.printOut保存及退出'oExcel.activeWorkBook.saveAs "d:\te.xls", 56' 21) 关闭退出' 关闭⼯作薄oExcel.activeWorkBook.close' 使⽤应⽤程序对象的quit⽅法关闭ExceloExcel.Quit' 释放该对象变量Set oExcel = Nothing。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50Option ExplicitDim oShellDim strCurrentPathSet oShell = CreateObject("Wscript.shell")strCurrentPath = oShell.CurrentDirectory'************************************************************************** '1、第一步要创建Excel Application'在VBS内部操作Excel,创建应用程序,相当于利用快捷方式启动Excle程序'这个时候并没有打开Excel文件'即这个时候,并没有打开工作簿,这个时候仅仅启动了应用程序'如果要操作Excel表格,需要打开一个工作簿'Dim oExcelApp'Set oExcelApp = WScript.CreateObject("Excel.Application")'oExcelApp.Visible = False'2、第二部打开工作簿'打开工作簿有两种方式' a. 打开已经存在的工作簿'需要注意的是,Excel应用程序对象没有提供打开工作簿的open方法'Excel应用程序对象,实例化后,就具有一个Workbooks 集合对象(interface '而Workbooks提供了open方法打开工作簿' b. 新建工作簿'同样Excle的应用程序对象没有提供新建工作簿的Add方法'而Workbooks集合对象(interface)所提供了Add方法打开工作簿' c. Open方法返回一个Workbook对象 open方法需要提供文件路径' Add 方法同样返回Workbook对象add方法需要提供模板参数,不指定采用默认'1、需要明白的是,Excel的对象模型并不是按照'Application ‐‐‐> Workbooks ‐‐‐‐‐‐> workbook ‐‐‐‐‐> sheet 这种模式理解是'2、而是下面这种'当打开一个已经存在工作簿打开或者新建一个工作簿时,那么打开的工作簿就添加'应用程序的Workbooks 里面'3、当打开一个工作簿或者新建一个工作簿,那么属于这个工作簿的sheet马上就属于'应用程序的worksheets里面,而且通过工作表的名称在worksheets里面引用'Dim strFileName'strFileName = strCurrentPath &"\1111.xlsx"'Dim oWorkbooks'Set oWorkbooks = oExcelApp.Workbooks'MsgBox "oWorkbooks的应用程序名为:"oWorkbooks.Application'Dim oWorkbook'Set oWorkbook = oExcelApp.Workbooks.Open(strFileName)'oWorkbook.Activate '打开的工作簿作为活动工作簿'1、workbook对象下sheets属性是不是集合,不能通过sheets集合返回Sheets对象51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100' 因此也不能通过Workbook对象下的Sheets属性来对工作表里的单元个进行访问'wokkbook对象下的sheets属性只能用于Sheet的增加、复制、移动和删除'oWorkbook.Sheets.Add'MsgBox oExcelApp.Worksheets("sheet1").Activate'Dim oSheet'Set oSheet = oExcelApp.Worksheets("sheet1")'oSheet.'oWorkbook.Save'oExcelApp.Workbooks.Close'oExcelApp.Quit'Dim objExcel,objbook,objSheet'Set objExcel=CreateObject("excel.application")'Set objBook=objExcel.Workbooks.Open(strCurrentPath & "\1111.xlsx")'Set objSheet=objbook.Sheets("sheet2")'objSheet.cells(2,2) = "我是写入的数据"'objbook.Save'obj'Set objBook=Nothing'Set objSheet=Nothing'objExcel.QuitDim oExcelAppDim oWorkbooksDim oWorkbookDim oWorkSheetSet oExcelApp = CreateObject("Excel.Application")Set oWorkbooks = oExcelApp.WorkbooksSet oWorkbook =oWorkbooks.Open(strCurrentPath & "\1111.xlsx")Set oWorkSheet = oWorkbook.Sheets("sheet1")oWorkSheet.cells(1,1) = "我是写入的数据"MsgBox oWorkSheet.cells(2,2)oWorkbook.SaveoWorkbooks.CloseoExcelApp.Quit101。
使用VBS读取变量归档数据到EXCEL1、创建变量。
过程归档变量、查询时间变量(一个起始时间、一个结束时间、时间间隔)过程变量为模拟量,其实时间和结束时间是文本变量8位字符集(时间的格式是XXXX-XX-XX XX:XX:XX),时间间隔位10进制数(单位秒)2、创建归档。
变量记录中选择好要记录的过程变量,设置好归档的时间等。
3、创建EXCEL表格模版,XXX.XLSX.4、界面上3个输入输入输出域(一个起始时间,一个结束时间,一个时间间隔),一个查询并生成EXCEL表格的按钮5、脚本主要分2块。
1是时间的转换,WINCC归档使用的时间是UTC(国际协调时间),所以需要进行时间的转换。
2是查询并生成EXCEL表格的脚本。
6、过程值归档的记录结构如下:脚本见文本文档'查询按钮中的代码Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y)Dim sPro,sDsn,sSer,sCon,conn,sSql,oRs,oComDim tagDSNNameDim m,iDim LocalBeginTime, LocalEndTime,UTCBeginTime, UTCEndTime,sValDim objExcelApp,objExcelBook,objExcelSheet,sheetnameitem.Enabled = FalseOn Error Resume Nextsheetname="Sheet1"Set objExcelApp = CreateObject("Excel.Application")objExcelApp.Visible = FalseobjExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx"objExcelApp.Worksheets(sheetname).ActivateSet tagDSNName = HMIRuntime.Tags("@DatasourceNameRT")tagDSNName.ReadSet LocalBeginTime = HMIRuntime.Tags("strBeginTime")LocalBeginTime.ReadSet LocalEndTime = HMIRuntime.Tags("strEndTime")LocalEndTime.ReadUTCBeginTime = DateAdd("h" ,-8,LocalBeginTime.Value)UTCEndTime= DateAdd("h" ,-8,LocalEndTime.Value)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)HMIRuntime.Trace "UTC Begin Time: " & UTCBeginTime & vbCrLfHMIRuntime.Trace "UTC end Time: " & UTCEndTime & vbCrLf Set sVal = HMIRuntime.Tags("sVal")sVal.ReadsPro = "Provider=WinCCOLEDBProvider.1;"sDsn = "Catalog=" &tagDSNName.Value& ";"sSer = "Data Source=.\WinCC"sCon = sPro + sDsn + sSerSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3conn.OpensSql = "Tag:R,('PVArchive\NewTag'),'" & UTCBeginTime & "','" & UTCEndTime & "',"sSql=sSql+"'order by Timestamp ASC','TimeStep=" & sVal.Value & ",1'"MsgBox sSqlSet oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("mand")mandType = 1Set oCom.ActiveConnection = connmandText = sSqlSet oRs = oCom.Executem = oRs.RecordCountIf (m > 0) ThenobjExcelApp.Worksheets(sheetname).cells(2,1).value=oRs.Field s(0).NameobjExcelApp.Worksheets(sheetname).cells(2,2).value=oRs.Field s(1).NameobjExcelApp.Worksheets(sheetname).cells(2,3).value=oRs.Field s(2).NameobjExcelApp.Worksheets(sheetname).cells(2,4).value=oRs.Field s(3).NameobjExcelApp.Worksheets(sheetname).cells(2,5).value=oRs.Field s(4).NameoRs.MoveFirsti=3Do While Not oRs.EOFobjExcelApp.Worksheets(sheetname).cells(i,1).value= oRs.Fields(0).ValueobjExcelApp.Worksheets(sheetname).cells(i,2).value= GetLocalDate(oRs.Fields(1).Value)objExcelApp.Worksheets(sheetname).cells(i,3).value= oRs.Fields(2).ValueobjExcelApp.Worksheets(sheetname).cells(i,4).value= oRs.Fields(3).ValueobjExcelApp.Worksheets(sheetname).cells(i,5).value= oRs.Fields(4).ValueoRs.MoveNexti=i+1LoopoRs.CloseElseMsgBox "没有所需数据……"item.Enabled = TrueSet oRs = Nothingconn.CloseSet conn = NothingobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= NothingExit SubEnd IfSet oRs = Nothingconn.CloseSet conn = NothingDim patch,filenamefilename=CStr(Year(Now))&""&CStr(Month(Now))&""&CStr(Day(Now))&""& CStr(Hour(Now))&""&CStr(Minute(Now))&""&CStr(Second(Now))patch= "d:\"&filename&"demo.xlsx"objExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= NothingMsgBox "成功生成数据文件!"item.Enabled = TrueEnd Sub'此为全局脚本中的时间转换代码Function GetLocalDate(vtDate)Dim DoYDim dsoDim dwiDim strComputer, objWMIService, colItems, objItemDim TimeZoneDim vtDateLocalDatestrComputer = "."Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery("Select * from Win32_TimeZone") For Each objItem In colItemsTimeZone = objItem.Bias / 60NextIf IsDate(vtDate) <> True ThenIS_GetLocalDate = FalseExit FunctionEnd IfDoY = DatePart("y", vtDate)dso = DatePart("y", "31.03") - DatePart("w", "31.03") + 1 dwi = DatePart("y", "31.10") - DatePart("w", "31.10") + 1 If DoY >= dso And DoY < dwi ThenTimeZone = TimeZone + 1End IfvtDateLocalDate = DateAdd("h", 1 * TimeZone, vtDate) GetLocalDate = vtDateLocalDateEnd Function。
在Visual Basic () 中,你可以使用Microsoft Office的Interop库来读取Excel文件。
以下是一个简单的例子,演示如何使用这种方法读取Excel文件中的数据。
首先,你需要添加对Microsoft Excel对象库的引用。
在Visual Studio中,可以通过以下步骤进行:1. 在解决方案资源管理器中,右键单击项目,然后选择"添加引用"。
2. 在"COM"选项卡下,找到并选择"Microsoft Excel 16.0 Object Library"(或者与你的Excel版本相对应的)。
3. 点击"确定"来添加引用。
然后,你可以使用以下代码来读取Excel文件:````Imports Microsoft.Office.InteropSub ReadExcelFile()Dim excelApp As New Excel.ApplicationDim workbooks As Excel.Workbooks = excelApp.WorkbooksDim workbook As Excel.Workbook =workbooks.Open("C:\path\to\your\file.xlsx")Dim worksheet As Excel.Worksheet = workbook.Worksheets("Sheet1") ' 替换为你的工作表名称Dim range As Excel.Range = edRangeFor i As Integer = 1 To range.Rows.CountFor j As Integer = 1 To range.Columns.CountDim cellValue As Object = range.Cells(i, j).ValueConsole.WriteLine(cellValue) ' 输出单元格值Next jNext iworkbook.Close()excelApp.Quit()End Sub````请注意,这种方法需要在运行代码的计算机上安装有Excel。
自动化VBS操作EXCEL和WORD ****************************' Excel操作'****************************'****************************' 定义Excel对象' xlsApp Excel应用程序对象' xlsWork Excel工作簿对象'****************************Dim xlsApp,xlsWork'----------------------------------------------------------------------------------'示例:调用获取excel当前路径并获取表中的使用的行数和列数filepath = getpath() & "TestFramework.xls"MsgBox filepathxlsOpen(filepath)xlsWork.WorkSheets("example").ActivateMsgBox "表中总共有" & xlsWork.WorkSheets("example").usedrange.rows.count & "行" '获取excel表中的所有使用行MsgBox "表中总共有" &xlsWork.WorkSheets("example").usedrange.columns.count & "列" '获取excel表中的所有使用列xlsClose()'----------------------------------------------------------------------------------'获取当前应用程序路径,把excel放到这个路径下以后就可以不用管路径问题了function getpath()dim wsheelSet wsheel=wscript.createobject("wscript.shell")getpath=wsheel.currentdirectory & "\"End Function'****************************' 函数名称:xlsOpen' 函数功能:打开Excel工作簿' 参数1:fileName Excel文件名称(包括路径)' /*参数2:sheetName Excel工作表名称*/' 返回值:无'****************************Sub xlsOpen(fileName)On Error Resume Next '遇见错误继续运行程序Set xlsApp = CreateObject("Excel.Application") '创建应用程序对象Set xlsWork = xlsApp.WorkBooks.open(fileName) '设置打开文件的对象'xlsWork.WorkSheets(sheetName).Activate '设置当前活动的工作表'如果有错误则关闭Excel程序If ERR.Number<>0 ThenMsgBox "asdf"Call xlsClose()End IfOn error goto 0End Sub'****************************' 函数名称:xlsRead' 函数功能:读取Excel表格中指定单元格的数据' 参数1:sheetName 工作表名称' 参数2:row 单元格所在行' 参数3:col 单元格所在列' 返回值:当前单元格的数据'****************************Function xlsRead(sheetName,row,col)On Error Resume nextxlsRead = xlsWork.WorkSheets(sheetName).Cells(row,col).Value '如果有错误则关闭Excel程序If ERR.Number<>0 ThenCall xlsClose()'Err.Clear()End IfOn error goto 0End Function'****************************' 函数名称:xlsWrite' 函数功能:写入数据到指定的Excle单元格' 参数1:sheetName 工作表名称' 参数2:row 单元格所在行' 参数3:col 单元格所在列' 参数4:val 要写入到单元格的数据' 返回值:无'****************************Function xlsWrite(sheetName,row,col,val)On Error Resume nextxlsWork.WorkSheets(sheetName).Cells(row,col).Value = val'如果有错误则关闭Excel程序If ERR.Number<>0 ThenCall xlsClose()End IfOn error goto 0End Function'****************************' 函数名称:xlsSave' 函数功能:保存Excel工作簿数据' 参数:无' 返回值:无'****************************Sub xlsSave()On Error Resume nextxlsWork.Save'xlsWork.SaveAs "C:\aa.xls" '另存为一个新文件'如果有错误则关闭Excel程序If ERR.Number<>0 ThenCall xlsClose()End IfOn error goto 0End Sub'****************************' 函数名称:xlsClose' 函数功能:关闭Excel工作簿' 参数:无' 返回值:无'****************************Sub xlsClose()'关闭对象xlsWork.ClosexlsApp.WorkBooks.Close'清空对象Set xlsWork = NothingSet xlsApp = NothingEnd Sub'****************************' word操作'****************************'****************************' 定义word对象' docApp word应用程序对象' docWork word文档对象'****************************Dim docApp,docWord'****************************' 函数名称:docCreate' 函数功能:创建word文档' 参数:无' 返回值:无'****************************Function docCreate()On Error Resume NextSet docApp = CreateObject("Word.Application")Set docWord = docApp.Documents.Add()'如果有错误则关闭Word程序If ERR.Number<>0 ThenCall docClose()End IfOn error goto 0End Function'****************************' 函数名称:docWrite' 函数功能:向word文档中写入数据' 参数1:val 要写入的数据' 参数2:dataType 写入数据的类型,text代表文本,bmp代表图像' 返回值:无'****************************Function docWrite(val,dataType)On Error Resume NextSelect Case dataTypeCase "text"docApp.Selection.TypeText valCase "bmp"docApp.Selection.InlineShapes.AddPicture val,false,trueEnd Select'如果有错误则关闭Word程序If ERR.Number<>0 ThenCall docClose()End IfOn error goto 0End Function'****************************' 函数名称:docSave' 函数功能:保存word文档' 参数:fileName 保存的文件路径以及名称' 返回值:无'****************************Function docSave(fileName)On Error Resume NextdocWord.SaveAs fileName'如果有错误则关闭Word程序If ERR.Number<>0 ThenCall docClose()End IfOn error goto 0End Function'****************************' 函数名称:docClose' 函数功能:关闭word文档' 参数:无' 返回值:无'****************************Function docClose()'关闭工作文档并退出Word应用程序docWord.closedocApp.Quit'清空对象Set docWord=nothingSet docApp=nothingEnd Function'****************************' QTP对象操作'****************************。
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经测试可以实现需要的功能。
wincc用vbs脚本读取excel表格,并以曲线显示出来
WinCC 的函数趋势控件提供给用户自定义XY轴曲线的功能,可以灵活方便地满足客户的某些需求。
但是西门子没有给出详细的方法,或者给出的方法不详尽。
比如只给出了曲线的显示方法,但没有给出曲线所需数据如何来获取?这给不少读者造成不便。
在本文所提到的示例中,不仅给出了如何利用函数趋势控件自定义XY轴曲线的功能,而且给出了如何从EXCEL表格中获取相应的数据,对读者有极大的参考价值。
具体方法如下:
函数趋势控件的数据连接方式的提供者均选择“无”,这意味着绘制曲线所需的数据不是直接来自在线变量、归档变量或用户归档,而是在这些数据的基础上进行统计计算或从数据库读取得来的。
1,首先,从“对象选项板“中的“控件”页中,将“WinCC Function Trend Control”托拽到画面上,将控件名称设置为“TrendYX1”。
2,在画面上放置一个按钮,命名为“VBS_Key3”。
在按钮事件的鼠标动作(OnClick)中添加脚本。
Sub OnClick(Byval Item)
Dim Key, FctTrdCtrl, i
Dim objTrend
' "VBS_Key" is the name of the clicked button
' Disable operator control and force grafic output
Set Key = ScreenItems("VBS_Key3")
Key.Operation = vbFalse
'获取文件夹和文件名
Dim sFolder
sFolder = "c:\demo"
Dim fs, oFolder, oFiles, oSubFolders
Set fs = CreateObject("Scripting.FileSystemObject")
Set oFolder = fs.GetFolder(sFolder) '获取文件夹
Set oSubFolders = oFolder.SubFolders '获取子目录集合Dim folder
For Each oSubFolders In oSubFolders
folder = oSubFolders
Next
Dim file
Set oFolder = fs.GetFolder(folder) '重新获取文件夹Set oFiles=oFolder.files
For Each oFiles In oFiles '获取文件名
file =
Next
Set fs=Nothing
'创建CreateObject("Excel.Application")并获取数据On Error Resume Next
Dim sql
Dim filename
Dim objExcelApp, f, Msg
Set objExcelApp = CreateObject("Excel.Application") objExcelApp.Visible = 0
objExcelApp.workbooks.open oFolder & "\" & file
Dim x_data(400),y_data(400)
For i=1 To 400
x_data(i)=objExcelApp.CELLS((i-1)*10+8,2).value
y_data(i)=objExcelApp.CELLS((i-1)*10+8,3).value
Next
objExcelApp.workbooks.close
objExcelApp.quit
objExcelApp=Nothing
'创建CreateObject("Excel.Application")并获取数据结束'开始以曲线显示
refresh
Set FctTrdCtrl = ScreenItems("TrendYX1")
Set objTrend = FctTrdCtrl.GetTrend("趋势1")
objTrend.RemoveData
For i = 0 To 400
objTrend.InsertData x_data(i),y_data(i)
Next
Key.Operation = vbTrue
MsgBox folder & "\" & file '显示曲线数据表示的excel文件
End Sub
参考wincc\自定义XY 轴的多功能曲线的实现方法.doc
Wincc帮助文件等。
用到的对象:Scripting.FileSystemObject,Excel.Application, FctTrdCtrl.GetTrend等对象。