使用pyodbc查询Excel表(不是命名范围)

问题描述 投票:0回答:0

我正在寻找查询 Excel 表 的方法(https://support.microsoft.com/en-us/office/overview-of-excel-tables-7ab0bb7d-3a9e-4b56-a3c9- 6c94334e492c)使用pyodbc。作为测试,我创建了一个 Excel 文件,其中包含一些 命名范围 和一个 Excel 表

我使用 Microsoft Excel Driver 创建了一个连接。然后我使用 Cursor 对象的 tables 方法列出工作簿中的表。但是,我只能看到工作表和命名范围,但看不到我命名为MyTableExcel表

有没有办法查询Excel表格MyTable?

谢谢

import pyodbc
for driver in pyodbc.drivers():
    print(driver)
    if '.xlsx' in driver:
        xlsxDriver = driver

# OUTPUT:
# SQL Server  
# ODBC Driver 17 for SQL Server  
# Microsoft Access Driver (*.mdb, *.accdb)  
# Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)  
# Microsoft Access Text Driver (*.txt, *.csv)  
conn_str=  (r'DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};'
            r'DBQ=C:\Users\ondre\OneDrive\Documents\openpyxlTEST.xlsx;'
            r'ReadOnly=1')

cnxn = pyodbc.connect(conn_str, autocommit = True)
crsr = cnxn.cursor()

[worksheet for worksheet in crsr.tables()]

# OUTPUT:
# [('C:\\Users\\ondre\\OneDrive\\Documents\\openpyxlTEST.xlsx', None, 'Sheet1$', 'SYSTEM TABLE', None),
#  ('C:\\Users\\ondre\\OneDrive\\Documents\\openpyxlTEST.xlsx', None, 'Sheet2$', 'SYSTEM TABLE', None),
#  ('C:\\Users\\ondre\\OneDrive\\Documents\\openpyxlTEST.xlsx', None, 'MyTable2', 'TABLE', None),
#  ('C:\\Users\\ondre\\OneDrive\\Documents\\openpyxlTEST.xlsx', None, 'MyTable3', 'TABLE', None),
#  ('C:\\Users\\ondre\\OneDrive\\Documents\\openpyxlTEST.xlsx', None, 'MyTable4', 'TABLE', None)]

所以例如我可以查询 MyTable3 命名范围但不能查询 MyTable:

crsr.execute("SELECT * FROM MyTable3")
[row for row in crsr]

# OUTPUT:
# [(datetime.datetime(1939, 3, 8, 0, 0), '1939-03-08 00:00:0', 2.0),  
#  (datetime.datetime(2063, 5, 13, 0, 0), '2063-05-13 00:00:0', 3.0),  
#  (datetime.datetime(2186, 1, 17, 0, 0), '2186-01-17 00:00:0', 5.0),  
#  (datetime.datetime(2210, 8, 13, 0, 0), '2210-08-13 00:00:0', 7.0),  
#  (datetime.datetime(2397, 12, 5, 0, 0), '2397-12-05 00:00:0', 8.0),  
#  (datetime.datetime(2420, 12, 9, 0, 0), '2420-12-09 00:00:0', 5.0),  
#  (datetime.datetime(2524, 7, 22, 0, 0), '2524-07-22 00:00:0', 1.0),  
#  (datetime.datetime(2623, 7, 19, 0, 0), '2623-07-19 00:00:0', 5.0),  
#  (datetime.datetime(2746, 7, 1, 0, 0), '2746-07-01 00:00:0', 10.0),  
#  (datetime.datetime(2836, 12, 22, 0, 0), '2836-12-22 00:00:0', 3.0)]
python excel pyodbc named-ranges excel-tables
© www.soinside.com 2019 - 2024. All rights reserved.