gpt4 book ai didi

python - 无法复制 openpyxl.Workbook 对象

转载 作者:行者123 更新时间:2023-12-04 20:26:59 32 4
gpt4 key购买 nike

我有 .xlsx 模板文件,用于通过 load_workbook(file) 创建 openpyxl.Workbook 对象。

我想使用导入的 Workbook 生成两个新的 Workbook 对象 wb1、wb2 并对它们中的每一个执行不同的转换,最后将它们存储在工作簿字典中。

写回文件时,我无法从字典中复制对象而没有错误

  • 将每个工作簿设置为等于模板,只创建引用指针而不创建不同的对象
  • 使用浅拷贝()创建不同的对象,但某些属性仍被引用
  • 使用 deepcopy() 创建具有不同属性的不同对象。但是,使用 BytesIO(save_virtual_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.Workbook 对象不支持 deepcopy。

    为了避免多次导入 .xlsx 模板文件,我首先从连接中读取它作为字节,然后多次执行 load_workbook 以创建不同的工作簿对象:

    connection.open() as f:
    template_file = BytesIO(f.read())

    wb1 = load_workbook(template_file)
    wb2 = load_workbook(template_file)

    关于python - 无法复制 openpyxl.Workbook 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188088/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com