我有.xlsx模板文件,用于创建openpyxl.工作簿对象通过加载工作簿(文件)。你知道吗
我想使用导入的工作簿生成两个新的工作簿对象wb1和wb2,并对它们进行不同的转换,最后将它们存储在工作簿字典中。你知道吗
回写文件时,我无法从字典中复制对象而不出错
将每个工作簿设置为模板,只创建引用指针,而不创建不同的对象
使用shallow copy()创建不同的对象,但仍会引用某些属性
使用deepcopy()可以创建具有不同属性的不同对象。但是,使用BytesIO(save\u virtual\u workbook(wb1))将工作簿导出回excel会出现以下类型的错误:
\stylesheet.py", line 232, in write_stylesheet xf.alignment = wb._alignments[style.alignmentId] IndexError: list index out of range
我认为deepcopy弄乱了对象的其他属性。你知道吗
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')
那个openpyxl.工作簿对象不支持deepcopy。你知道吗
为了避免多次导入.xlsx模板文件,我首先从连接中将其读取为字节,然后多次执行load\u workbook以创建不同的工作簿对象:
相关问题 更多 >
编程相关推荐