我正在开发一个写入现有 .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'
错误消息表明您正在尝试在不具有此属性的对象上设置属性“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”,以便在写入文件时不会删除现有工作表。
希望对您有所帮助!如果您还有其他问题,请告诉我。