Openpyxl:写入 excel 收到“无法设置属性‘book’”错误

问题描述 投票:0回答:1

我正在开发一个写入现有 .xlsx 文件的函数。 我的环境是: 赢10 Win32 上的 Python 3.10.9(标签/v3.10.9:1dd9be6,2022 年 12 月 6 日,20:01:21)[MSC v.1934 64 位 (AMD64)] openpyxl 3.1.2 熊猫 2.0.0 但是经过多次尝试,我收到了以下错误。 你能帮我看看有什么问题吗? 谢谢

import pandas as pd
from openpyxl import load_workbook, Workbook


def write_resolution(df, file_name, sheet_name):
    if os.path.isfile(file_name):
        workbook = load_workbook(file_name)
    else:
        workbook = Workbook()      
    writer = pd.ExcelWriter(file_name, engine='openpyxl')
    writer.book = workbook
    if sheet_name in workbook.sheetnames:
        del workbook[sheet_name]
    worksheet = workbook.create_sheet(sheet_name,-1)         
    worksheet=workbook.active
    df.to_excel(writer, sheet_name=sheet_name, index=False)
    
    if os.path.isfile(file_name):
        writer.save()
    else:
        writer.save(file_name)

报错信息如下:

File <timed exec>:125, in write_resolution(df, file_name, sheet_name)

AttributeError: can't set attribute 'book'
python-3.x openpyxl
1个回答
0
投票

错误消息表明您正在尝试在不具有此属性的对象上设置属性“book”。在这种情况下,对象似乎是 ExcelWriter 对象。

要解决此问题,您可以尝试在使用 load_workbook 加载工作簿后创建 ExcelWriter 对象。这是您的代码的修改版本,应该可以工作:

import os
import pandas as pd
from openpyxl import load_workbook, Workbook


def write_resolution(df, file_name, sheet_name):
    if os.path.isfile(file_name):
        workbook = load_workbook(file_name)
    else:
        workbook = Workbook()
    if sheet_name in workbook.sheetnames:
        del workbook[sheet_name]
    worksheet = workbook.create_sheet(sheet_name, -1)
    writer = pd.ExcelWriter(file_name, engine='openpyxl', mode='a') # mode='a' for append
    writer.book = workbook
    df.to_excel(writer, sheet_name=sheet_name, index=False)
    writer.save()

在这里,我们在加载工作簿后创建ExcelWriter对象,并将ExcelWriter对象的'book'属性设置为加载的工作簿。我们还将追加模式设置为“a”,以便在写入文件时不会删除现有工作表。

希望对您有所帮助!如果您还有其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.