#python #excel #pandas #dataframe #openpyxl
Вопрос:
Я написал ниже код для записи в рабочую книгу с использованием панд. Идея состоит в том, чтобы добавить новый лист в книгу, если он с таким же именем уже существует, в противном случае создайте новую книгу.
import pandas as pd
from pathlib import Path
from openpyxl import load_workbook
xls = pd.ExcelFile("test.xlsx")
df = pd.read_excel(xls, "Sheet1")
op_name = "op.xlsx"
my_file = Path(op_name)
if my_file.exists():
book = load_workbook(my_file)
writer = pd.ExcelWriter(op_name, engine='openpyxl', mode='a')
writer.book = book
df.to_excel(writer, sheet_name="r2")
else:
writer = pd.ExcelWriter(op_name, engine='openpyxl')
df.to_excel(writer, sheet_name="r1")
writer.save()
writer.close()
Однако при открытии выходной книги я получаю следующую ошибку:
Мы обнаружили проблему с некоторым контентом в ‘op.xlsx». Вы хотите, чтобы мы постарались восстановить как можно больше?
Я перепробовал несколько вариантов этого кода, но ничего не помогло. Любые предложения о том, как решить эту проблему, будут высоко оценены.
Комментарии:
1. без воспроизводимого примера вам будет трудно помочь
2. @Roim Ошибку можно воспроизвести, запустив код, опубликованный в моем посте
3. с любым файлом excel? или это зависит от test.xlsx?
4. Вы можете использовать любой файл Excel. Мой тестовый файл состоит из двух строк и двух столбцов, остальное все пусто
5. Голосовать против, потому что это невозможно воспроизвести. Предоставьте xlsx, с которым у вас возникли проблемы.
Ответ №1:
Привет, какую версию pandas вы использовали, если версия pandas >= 1.2 эта ошибка произошла, как указано в этом отчете об ошибке в >GitHub. Снизьте версию pandas до 1.1.5 или, если вы особенно используете эту более новую версию, пожалуйста, отредактируйте файл библиотеки python, как показано ниже.
в pandas/io/excel/_openpyxl.py добавьте следующие строки
self.handles.handle.seek(0)
self.handles.handle.truncate()
ниже этой строки
self.book = load_workbook(self.handles.handle)
Это исправление предназначено только для библиотек pandas >= 1.2.
Ответ №2:
op_name
это только имя файла. my_file
переменная имела путь к файлу. ExcelWriter()
принимает параметр пути к файлу, а не имя файла.
Попробуй writer = pd.ExcelWriter(my_file, engine='openpyxl', mode='a')