gpt4 book ai didi

python - 使用 Python comtypes 库将查询表添加到 Excel 时出现问题

转载 作者:太空狗 更新时间:2023-10-30 01:24:27 24 4
gpt4 key购买 nike

我正在尝试使用 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代码:

import sys
import comtypes.client as client

def create_querytable():
constring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Path\\to\\Db.mdb"
conn = client.CreateObject("ADODB.Connection", dynamic = True)
rs = client.CreateObject("ADODB.Recordset", dynamic = True)

SQL = "Select * from [tbl Base Data];"

conn.Open(constring)
rs.Open(SQL, conn)
excel = client.CreateObject("Excel.Application", dynamic = True)
excel.Visible = True
ws = excel.Workbooks.Add().Sheets(1)
qt = ws.QueryTables.Add(rs, ws.Range["A1"])
qt.Refresh()
rs.Close()
conn.Close()

抛出无用的错误信息:

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

对这里发生的事情有什么想法吗?

谢谢!

最佳答案

我简化了您的代码,这应该可以正常工作(我将在下面解释更改):

def create_querytable2():
constring = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\db.mdb;"
SQL = "Select * from tblName;"
excel = client.CreateObject("Excel.Application", dynamic=True)
excel.Visible = True
ws = excel.Workbooks.Add().Worksheets(1)
ws.QueryTables.Add(constring, ws.Range["A1"], SQL).Refresh()

QueryTables.Add() 函数可以为您创建 Connection 和 Recordset 对象,这样可以简化很多事情...您只需在连接字符串(“OLEDB”部分)。

让 Excel 完成大部分工作似乎可以解决您的问题:)

关于python - 使用 Python comtypes 库将查询表添加到 Excel 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com