从Excel,自动化或ADODB中的单个单元格读取VBScript?

不是一个编码器,第一次问一个问题…所以请容易! 在空中graphics应用程序中使用VBScript。

我有两种方法可用于从Excel电子表格中读取数据。 我认为他们被称为自动化和ADODB连接。

我可以同时工作,但这里有一个问题:自动化比较慢,但它可以轻松读取单个单元。 ADODB超级快,但我不能指向单个单元格,只能列。 那有意义吗?

我希望能够使用ADODB来读取单个单元格。 我疯了吗?

这是我的代码:

自动(工作,但需要10秒钟):

Dim SelectedboxSpreadsheet 'InputBox: ask for spreadsheet Dim shell : Set shell = CreateObject("Shell.Application") Dim boxSpreadsheet : Set boxSpreadsheet = shell.BrowseForFolder(0, "Select box Spreadsheet:", &H4000, "%SystemRoot%\explorer.exe") SelectedboxSpreadsheet = boxSpreadsheet.self.path Dim objExcel Dim currentWorksheet Dim Cells Sub OpenExcelSheet(SheetNumber) Set objExcel = CreateObject("Excel.Application") objExcel.Workbooks.open SelectedboxSpreadsheet, false, true Set currentWorksheet = objExcel.ActiveWorkbook.Worksheets(SheetNumber) Set Cells = currentWorksheet.Cells End Sub Sub CloseExcelSheet() objExcel.Workbooks.Close objExcel.Quit Set currentWorkSheet = Nothing Set objExcel = Nothing Set Cells = Nothing End Sub Call OpenExcelSheet("box") TrioCmd("page:set_property H111 " & (Cells(2,2).Value)) TrioCmd("page:set_property I111 " & (Cells(2,8).Value)) TrioCmd("page:update") Call CloseExcelSheet 

和ADODB(工作,但不能读取特定的单元格,必须格式化电子表格):

 Dim SelectedSpreadsheetFromTxt Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Set file =fso.OpenTextFile("C:\ProgramData\vizrt\Trio\WorldCupDrawSpreadsheetPath.txt") Do Until file.AtEndOfStream line = file.ReadLine Loop file.Close SelectedSpreadsheetFromTxt = line dim objConnection, objRecordSet set objConnection = CreateObject("ADODB.Connection") set objRecordSet = CreateObject("ADODB.Recordset") objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" &_ "Data Source=" & SelectedSpreadsheetFromTxt & ";" &_ "Extended Properties=""Excel 12.0; HDR=Yes; IMEX=1"";" dim A1name,A1tri,A2name,A2tri,A3name,A3tri,A4name,A4tri objRecordSet.Open "SELECT * FROM [Trio Data Group A$]", objConnection Do Until objRecordSet.EOF A1name = objRecordSet.Fields.Item("A1name") A1tri = objRecordSet.Fields.Item("A1tri") A2name = objRecordSet.Fields.Item("A2name") A2tri = objRecordSet.Fields.Item("A2tri") A3name = objRecordSet.Fields.Item("A3name") A3tri = objRecordSet.Fields.Item("A3tri") A4name = objRecordSet.Fields.Item("A4name") A4tri = objRecordSet.Fields.Item("A4tri") TrioCmd("page:set_property 0006 " & A1tri) TrioCmd("page:set_property 0007 " & A2tri) TrioCmd("page:set_property 0008 " & A3tri) TrioCmd("page:set_property 0009 " & A4tri) TrioCmd("page:set_property 0401 " & A1name) TrioCmd("page:set_property 0411 " & A2name) TrioCmd("page:set_property 0421 " & A3name) TrioCmd("page:set_property 0431 " & A4name) objRecordSet.MoveNext Loop 

无论如何,这似乎是在黑暗中的一枪,但任何意见将不胜感激…谢谢!

你应该只使用自动化,因为即使需要10秒,它的效果会更好