我试图使用Python comtypes库在excel电子表格中创建一个QueryTable,但是得到了一个相当不具信息性的错误。。。在
在vba中(在工作簿中的模块中),以下代码可以正常工作:
Sub CreateQuery()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ws As Worksheet
Dim qt As QueryTable
Set ws = ActiveWorkbook.Sheets(1)
Set con = New ADODB.Connection
con.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\to\Db.mdb;")
Set rs = New ADODB.Recordset
rs.Open "Select * from [tbl Base Data];", con
Set qt = ws.QueryTables.Add(rs, ws.Range("A1"))
qt.Refresh
End Sub
但是下面的Python代码:
^{pr2}$引发无用的错误消息:
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
create_querytable()
File "C:/Documents and Settings/cvmne250/Desktop/temp.py", line 17, in create_querytable
qt = ws.QueryTables.Add(rs, ws.Range["A1"])
File "G:\ISA\SPSS\comtypes\lib\comtypes\client\lazybind.py", line 160, in caller
File "G:\ISA\SPSS\comtypes\lib\comtypes\automation.py", line 628, in _invoke
COMError: (-2147352567, 'Exception occurred.', (None, None, None, 0, None))
有什么想法吗?在
谢谢!在
看来你的错误在这一行:
你认为你的python语法是一个使用vbi的问题。试着把你的方括号改成圆括号。在
即
^{pr2}$原因是在VBA中,当您调用这样的集合时,
Range("A1")
,实际上是在调用它的默认方法Range.Item("A1")
。基本上,VBA集合不能转换成python字典。在我从这个forum thread和我的VBA经验中得到了这个。在
因评论而编辑:
你知道}是否相同?您可以尝试用win32com包创建com对象,看看这是否有什么不同。在
comtypes.client.CreateObject
和{我简化了您的代码,这应该可以正常工作(我将在下面解释更改):
在查询表。添加()函数可以为您创建连接和记录集对象,因此可以简化许多事情。。。您只需要在连接字符串(“OLEDB”部分)中添加连接类型。在
让Excel完成大部分工作似乎可以解决您的问题:)
相关问题 更多 >
编程相关推荐