BADZIP-файл с load_workbook

#python #excel #pandas #error-handling #openpyxl

#python #excel #панды #обработка ошибок #openpyxl

Вопрос:

Я пытаюсь добавить данные dataframe в существующий файл xlsx.

Это мой код:

 #Files' infos
filename = 'data.xlsx'
sheet_name = 'Sheet1'

if not os.path.isfile(filename):
    df.to_excel(
        filename,
        sheet_name=sheet_name, 
        startrow=startrow if startrow is not None else 0, 
        **to_excel_kwargs)
    

writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a')

# try to open an existing workbook
writer.book = load_workbook(filename)
    
# get the last row in the existing Excel sheet
# if it was not specified explicitly
if startrow is None and sheet_name in writer.book.sheetnames:
    startrow = writer.book[sheet_name].max_row

# truncate sheet
if truncate_sheet and sheet_name in writer.book.sheetnames:
    # index of [sheet_name] sheet
    idx = writer.book.sheetnames.index(sheet_name)
    # remove [sheet_name]
    writer.book.remove(writer.book.worksheets[idx])
    # create an empty sheet [sheet_name] using old index
    writer.book.create_sheet(sheet_name, idx)
    
# copy existing sheets
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}

if startrow is None:
    startrow = 0

# write out the new sheet
df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs)

# save the workbook
writer.save()
 

Я получаю эту ошибку, хотя: zipfile.BadZipFile: файл не является zip-файлом

Я попытался writer.save() и закрыть перед load_workbook, но я продолжаю получать ту же ошибку.

Ответ №1:

Я также решаю эту проблему с помощью того же кода, когда пытался установить пакеты pandas и openpyxl с версией pip3 по умолчанию.

Тем не менее, я попытался использовать conda для установки «pandas», «openpyxl», и это сработало.

Затем я переустановил ту же версию в pip3, и она работала и в pip3. Я думал, что версия пакета имеет значение.

Вот как я делаю

pip3 install pandas==1.1.1 openpyxl==3.0.5 jinja2