You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

openpyxl保存时自定义命名样式的Style Includes复选框异常全选问题

openpyxl保存后自定义样式的“Style Includes”复选框全勾选问题解决

问题概述

使用openpyxl加载包含自定义命名样式myNewStyle的Excel文件,直接保存为新文件后,新文件中该样式的“Style Includes”所有复选框被自动勾选,与原文件仅部分勾选的状态不符,影响后续手动编辑Excel。

复现代码:

import openpyxl
workbook = openpyxl.load_workbook("testStyle.xlsx")  # 加载含自定义样式的Excel
workbook.save("newExcelFile.xlsx") # 直接保存为新文件

测试环境:Python 3.10,openpyxl==3.1.5,尝试过xlsm格式加keep_vba=True,问题依旧。

问题原因

openpyxl解析Excel自定义样式时,默认会将所有样式属性标记为“包含”(对应复选框勾选状态),即使原文件中部分属性未被选中。这是因为openpyxl未完整保留原样式中“哪些属性被显式设置”的标记,加载后默认认为所有属性都被包含,导致保存时强制勾选所有复选框。

解决方案

加载工作簿后,手动修改目标自定义样式的_includes字典,对应原文件中未勾选的复选框,将其值设为False。_includes字典的键与“Style Includes”选项的对应关系:

  • font:字体
  • fill:填充
  • border:边框
  • alignment:对齐方式
  • number_format:数字格式
  • protection:保护

示例代码(假设原样式仅勾选了“字体”):

import openpyxl

workbook = openpyxl.load_workbook("testStyle.xlsx")
# 获取目标自定义样式
custom_style = workbook.named_styles["myNewStyle"]
# 按照原文件复选框状态设置_includes
custom_style._includes = {
    "font": True,
    "fill": False,
    "border": False,
    "alignment": False,
    "number_format": False,
    "protection": False
}
workbook.save("newExcelFile.xlsx")

注意事项

  • 需根据原文件实际的复选框状态调整_includes的键值对,确保与原样式一致。
  • _includes是openpyxl的内部属性,未来版本可能存在变更,但在3.1.5版本中可正常使用。

内容的提问来源于stack exchange,提问作者Richard Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:37:14