У меня есть файл шаблона .xlsx, который используется для создания объекта openpyxl.Workbook через load_workbook (файл).
Я хочу использовать импортированную рабочую книгу для создания двух новых объектов рабочей книги wb1, wb2 и выполнения различныхпреобразования к каждому из них и в конце сохраните их в словаре рабочих книг.
Я не могу скопировать объекты из словаря без ошибок при обратной записи в файл
Установка каждой рабочей книги равной шаблону, создание только ссылочных указателей, а не разных объектов
Использование мелкого copy () создает разные объекты, но некоторые свойства все еще ссылаются
Использование deepcopy () создает разные объекты с разными свойствами. Однако при экспорте книг обратно в Excel с использованием BytesIO (save_virtual_workbook (wb1)) выдается ошибка типа:
\ stylesheet.py ", строка 232, в write_stylesheet xf. alignment = wb._alignments [style.alignmentId] IndexError: список индексов выходит за пределы диапазона
Я думаю, что глубокая копия нарушает некоторые другие свойства объекта.
from openpyxl import load_workbook
from openpyxl.writer.excel import save_virtual_workbook
from io import BytesIO
import copy
import pysftp
conn = pysftp.Connection()
with conn.open() as f:
wb_template = load_workbook(file)
wb1 = copy.deepcopy(wb_template)
wb2 = copy.deepcopy(wb_template)
wb1['Sheet'].cell(1,1).value = 'wb1'
wb2['Sheet'].cell(1,1).value = 'wb2'
wbs = {}
wbs['wb1'] = wb1
wbs['wb2'] = wb2
# Copying with deepcopy works but exporting to file gives errors!
print(wbs['wb1']['Sheet'].cell(1,1).value)
print(wbs['wb2']['Sheet'].cell(1,1).value)
# Writing to file deep copied workbook gives error
conn.putfo(BytesIO(save_virtual_workbook(wbs['wb1'])), 'file.xlsx')