无法使 pyodbc-4.0 64 位找到 excel 驱动程序(windows10-64 位)

fail to make pyodbc-4.0 64bit find excel driver (windows10-64bit)

我不知道如何在 windows 10 64 位 (python-3.6) 上使用 pyodbc4 连接到我的 excel 文件。有人知道我在这段代码中的错误吗?

import pyodbc
import os
sources = pyodbc.dataSources()
dsns = list(sources.keys())
dsns.sort()
sl = []
for dsn in dsns:
    sl.append('%s [%s]' % (dsn, sources[dsn]))
print('\n'.join(sl))

# DATABASE CONNECTION
filename = 'C:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls'
assert os.path.exists(filename)

# was wrong: CNXNSTRING = 'Driver={Microsoft Excel Driver (*.xls)};DBQ=%s;READONLY=FALSE' % filename
CNXNSTRING = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=%s;READONLY=FALSE' % filename
print ('CNXNSTRING is ', CNXNSTRING)
cnxn = pyodbc.connect(CNXNSTRING, autocommit=True)

64 位结果:

 >>> 
 RESTART: C:/WinPython/basedir36/buildZero/winpython-64bit3.6.x.1/notebooks/TEST6.py 
 Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
 MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]
 dBASE Files [Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)]
 CNXNSTRING is  Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls;READONLY=FALSE
 Traceback (most recent call last): File "C:/WinPython/basedir36/buildZero/winpython-64bit-3.6.x.1/notebooks/TEST6.py", line 17, in <module>
cnxn = pyodbc.connect(CNXNSTRING, autocommit=True)
 pyodbc.Error: ('IM002', '[IM002] [Microsoft][Gestionnaire de pilotes ODBC]     Source de donn�es introuvable et nom de pilote non sp�cifi� (0) (SQLDriverConnect)')
 >>> 

新发现:如果我使用 pyodbc4- 32 位和 python-3.6 32 位,它可以工作...那么如何让它在 64 位中工作?

32 位结果:

>>> 
 RESTART: C:\WinPython\basedir36\buildZero\winpython-32bit-3.6.x.1\notebooks\TEST6.py 
Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]
dBASE Files [Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)]
CNXNSTRING is  Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls;READONLY=FALSE
>>>

it works if I use pyodbc4- 32 bit and python-3.6 32 bit... so how to make it work in 64 bit ?

如果脚本 运行 在 64 位 Python 下,则需要安装 64 位版本的 Excel ODBC 驱动程序。

There is an old office 2007 32 bit on this pc

可以 "forced install" 64 位 Access 数据库引擎(包括 Access 和 Excel ODBC 驱动程序)与 32 位版本的 Office 一起使用,但那是不推荐,因为在某些情况下它会破坏 Office 安装。 (它被称为 "forced install" 因为 Access 数据库引擎安装程序的默认行为是防止它发生。)

如果 "old office 2007" 不再被使用,那么您可以将其卸载,然后安装 64 位版本的 Access 数据库引擎。如果 仍在使用,那么您可能应该坚持使用 运行 32 位 Python 脚本。