Невозможно выполнить Excel SQL Query из приложения Python - PullRequest
0 голосов
/ 01 июля 2019

Из моего приложения Python я пытаюсь открыть ADODB-соединение с Excel. Код как ниже:

# Create Connection object and connect to database.
ado_conn = win32com.client.gencache.EnsureDispatch('ADODB.Connection')
ado_conn.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Test1.xlsx; Extended Properties ='Excel 12.0 Xml;HDR=YES'";

ado_conn.Open()

# Now create a RecordSet object and open a table
oRS = win32com.client.gencache.EnsureDispatch('ADODB.Recordset')
oRS.ActiveConnection = ado_conn    # Set the recordset to connect thru oConn

oRS.Open("SELECT * FROM [Orders]") 

Когда я отлаживаю приложение, оно выдает ошибку:

com_error (-2147352567, «Возникло исключение.», (0, «Ядро базы данных Microsoft Access», «Ядро базы данных Microsoft Access не может найти объект« Заказы ». Убедитесь, что объект существует и что вы написали его имя»). и путь правильно. Если 'Orders' не является локальным объектом, проверьте сетевое подключение или обратитесь к администратору сервера. ", Нет, 5003011, -2147217865), Нет)

В листе Excel строка подключения выглядит следующим образом:

Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Orders;Extended Properties=""

Текст команды:

Select * from [Orders]

Даже если соединение есть, оно выдает эту ошибку.

Как выполнить вышеуказанный запрос Excel из приложения Python?

Редактировать: скриншот подключения к Excel добавлен ниже

enter image description here

1 Ответ

1 голос
/ 01 июля 2019

Чтобы использовать Jet / ACE SQL Engine для запроса книг Excel, необходимо использовать адресную ссылку $, которая может быть расширена для определенных диапазонов ячеек:

SELECT * from [Orders$]

SELECT * from [Orders$B4:Y100]

С учетом вышесказанного рассмотрите возможность запроса рабочих книг Excel непосредственно из Python с помощью поставщика OLEDB или версии драйвера ODBC и избегайте COM-взаимодействия объекта ADO в Window:

# OLEDB PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=Microsoft.ACE.OLEDB.12.0;" \
                        "Data Source = C:\\Test1.xlsx;" \
                        "Extended Properties ='Excel 12.0 Xml;HDR=YES'")
cursor = conn.cursor()

cursor.execute("SELECT * FROM [Orders$]")    
for row in cursor.fetchall():
    print(row)

# ODBC DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" \
                      "DBQ=C:\Path\To\Excel.xlsx;")    
cursor = conn.cursor()

cursor.execute("SELECT * FROM [Orders$]")    
for row in cursor.fetchall():
    print(row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...