Я использую pyodb c для создания нового файла Excel, и операции, кажется, выполняются нормально, но полученный файл xlsx поврежден.
Я вырезал код до этого минимального кода snippet:
import pyodbc
# Setup path and driver connection string
spreadsheet_path = "C:\\temp\\test_spreadsheet.xlsx"
conn_str = (r'Driver={{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}};'
r'DBQ={}; ReadOnly=0').format(spreadsheet_path)
with pyodbc.connect(conn_str, autocommit=True) as conn:
# Create table
cursor = conn.cursor()
query = "create table sheet1 (COL1 TEXT, COL2 NUMBER);"
cursor.execute(query)
cursor.commit()
# Insert a row
query = "insert into sheet1 (COL1, COL2) values (?, ?);"
cursor.execute(query, "apples", 10)
cursor.commit()
# Check the row is there
query = "select * from sheet1;"
cursor.execute(query)
for r in cursor.fetchall():
print(r)
print("done")
Обратите внимание, что это создаст новую электронную таблицу в месте, указанном в spreadsheet_path. Мне пришлось использовать полный путь, потому что драйвер ODB C не любит относительные пути.
Я включил автокоммит и вручную вызвал cursor.commit()
, чтобы проверить, имеет ли это значение, и он нет.
Есть идеи?
-
После некоторого поиска я нашел это руководство по использованию драйвера Excel ODB C с PowerShell и упоминается:
Проблема в создаваемой вами книге. Независимо от того, назовете ли вы его XLS или XSLX, он создает электронную таблицу XLSX в последней заархивированной форме Office Open XML. Проблема в том, что с моей версией драйвера я могу заставить Excel читать его только с типом файла XLS, поскольку он сообщает об ошибке, если вы пытаетесь открыть его как файл .XLSX. Я подозреваю, что драйвер ODB C не был так хорошо протестирован Microsoft.
Если я изменю файл на .xls, я могу открыть его в Excel (хотя это дает мне предупреждение о несовпадении формата и расширения). Однако данные действительны. Это все из-за дрянного драйвера Microsoft? Или я что-то здесь делаю не так?