Невозможно импортировать имя 'save_virtual_workbook' из 'openpyxl.writer.excel'

Есть ли обновление библиотеки?

Раньше он работал отлично, а сегодня я обновился и он больше не загружается

Я искал, но не могу найти другой вариант

openpyxl 3.0.10 для drf-exel 2.2.0

save_virtual_workbook является deprecated в openpyxl. Последняя версия openpyxl с этой функцией 3.0.10. code

Я решил эту проблему, установив более старую версию 3.0.10 pip install openpyxl==3.0.10

Похоже, что новая рекомендация от разработчиков - использовать временный файл: https://openpyxl.readthedocs.io/en/3.1/tutorial.html?highlight=save#saving-as-a-stream

from tempfile import NamedTemporaryFile
from openpyxl import Workbook
wb = Workbook()
with NamedTemporaryFile() as tmp:
    wb.save(tmp.name)
    tmp.seek(0)
    stream = tmp.read()
<<<Официальная рекомендация

не работает в Windows как таковая + она использует файловую систему для сохранения рабочей книги в bytes, пусть даже на короткое время. Вот лучший, на мой взгляд, метод, который работает только в памяти:

with io.BytesIO() as buffer:
    wb.save(buffer)
    content = buffer.getvalue()

Это работает, потому что базовый ZipFile(), используемый здесь, принимает файлоподобный объект, а не только фактическое имя файла. Не документировано, но работает в версии 3.1.

Вернуться на верх