代码如下
wb = load_workbook(path)
ws = wb["Sheet"]
# 设置页面方向为横向
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
# 设置纸张大小为A4
ws.page_setup.paperSize = ws.PAPERSIZE_A4
# 设置页边距openpyxl.worksheet.page.PageMargins
ws.page_margins = PageMargins(
top=0.5, bottom=0.5, left=0.2, right=0.2, header=0.1, footer=0.1
)
# 将所有列调整为一页
ws.page_setup.fitToPage = True
ws.page_setup.fitToHeight = 0
ws.page_setup.fitToWidth = 1
# ws.page_setup.scale = 90
wb.save(path)
运行第一次是正常的,但是运行第二次就报下面的错:
AttributeError: 'NoneType' object has no attribute 'sheet_properties'
这应该是个bug,excel解析时候self = super(PrintPageSetup, cls).from_tree(node)不会传parent参数.改下代码把parent加上就好了.
ws = wb["Sheet"]
ws.page_setup._parent = ws #加上这一句
太厉害了。一下子就解决了,虽然我没明白是什么意思,但是很有效果。赞👍。
在您提供的代码中,您使用 openpyxl
库进行 Excel 文件的操作,看起来在设置工作表的页面布局时遇到了问题。错误信息 AttributeError: 'NoneType' object has no attribute 'sheet_properties'
表示在某次运行时 ws
变量被赋值为 None
,这通常意味着工作表实例可能没有正确加载或者文件在某种情况下被关闭或清空。
重复运行问题:
load_workbook
函数在第二次调用时可能会再次加载文件并进行某些更改,但文件的状态可能不再有效。ws
变量中的引用出错。对象状态:
ws
应该指向有效的工作表实例。如果在第一次运行时对 ws
做了某些不可逆的更改,下一次再尝试访问可能会出现错误。以下是一些建议来避免此类错误:
在每次需要操作工作簿时,从新加载工作簿,而不是依赖旧的实例。例如:
from openpyxl import load_workbook
from openpyxl.worksheet.page import PageMargins
path = "your_file.xlsx" # 替换为您的文件路径
# 每次都重新加载文件
wb = load_workbook(path)
ws = wb["Sheet"]
# 设置页面方向为横向
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
# 设置纸张大小为A4
ws.page_setup.paperSize = ws.PAPERSIZE_A4
# 设置页边距
ws.page_margins = PageMargins(
top=0.5, bottom=0.5, left=0.2, right=0.2, header=0.1, footer=0.1
)
# 将所有列调整为一页
ws.page_setup.fitToPage = True
ws.page_setup.fitToHeight = 0
ws.page_setup.fitToWidth = 1
# 保存工作簿
wb.save(path)
确保在加载工作表后检查 ws
是否有效,避免在操作无效对象时出现错误:
if ws is None:
print("工作表加载失败,请检查工作表名称.")
else:
# 进行后续操作
# 设置页面布局代码
确保在第一次运行时,文件没有受到损坏或未以其他模式(如只读)打开。这可以用文件管理器打开检查一下文件状态。
确保使用 ws.page_setup
的时候,这个对象在每次运行时都是新的并且是有效的。
from openpyxl import load_workbook
from openpyxl.worksheet.page import PageMargins
def configure_excel(path):
# 每次加载工作簿
wb = load_workbook(path)
ws = wb["Sheet"]
# 检查工作表是否加载成功
if ws is None:
print("工作表加载失败,请检查工作表名称.")
return
# 设置页面方向为横向
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
# 设置纸张大小为A4
ws.page_setup.paperSize = ws.PAPERSIZE_A4
# 设置页边距
ws.page_margins = PageMargins(
top=0.5, bottom=0.5, left=0.2, right=0.2, header=0.1, footer=0.1
)
# 将所有列调整为一页
ws.page_setup.fitToPage = True
ws.page_setup.fitToHeight = 0
ws.page_setup.fitToWidth = 1
# 保存工作簿
wb.save(path)
# 使用函数
path = "your_file.xlsx" # 替换为您的文件路径
configure_excel(path)
请尝试上述建议并对代码进行适当的调整。如果问题仍然存在,您还可以提供更多的上下文(比如运行顺序、环境信息等),以便进一步帮助您排查问题。