pyodb c создание поврежденного файла Excel - PullRequest
0 голосов
/ 04 августа 2020

Я использую 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? Или я что-то здесь делаю не так?

...