You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在openpyxl中使用预设颜色实现PatternFill?报错求助

如何在openpyxl中正确使用预设颜色名称填充单元格?

你这段代码报错的核心问题是用错了颜色类PatternFill(单元格样式填充)的start_color参数需要的是openpyxl.styles.colors.Color对象,或者直接传入预设颜色的字符串名称,而你用的ColorChoice是用于绘图对象(比如形状、图表)的填充类,两者不兼容,所以才会抛出类型错误。

给你两种正确的实现方式:

方式一:直接使用预设颜色名称字符串(最便捷)

openpyxl支持直接传入预设颜色的英文名称(比如'yellow''red''blue'等),不需要手动创建颜色对象,内部会自动处理:

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, NamedStyle

wb= Workbook()
ws = wb.active
sashighlight = NamedStyle(name="sashighlight")
bd = Side(style='thick', color="000000")
sashighlight.border = Border(left=bd, top=bd, right=bd, bottom=bd)
sashighlight.alignment = Alignment(horizontal='center', vertical='center')
# 直接传入预设颜色名称即可
sashighlight.fill = PatternFill(fill_type='solid', start_color='yellow')

方式二:显式使用Color对象

如果你需要更明确地控制颜色,可以导入Color类,直接传入名称或者使用索引颜色:

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, NamedStyle
from openpyxl.styles.colors import Color

wb= Workbook()
ws = wb.active
sashighlight = NamedStyle(name="sashighlight")
bd = Side(style='thick', color="000000")
sashighlight.border = Border(left=bd, top=bd, right=bd, bottom=bd)
sashighlight.alignment = Alignment(horizontal='center', vertical='center')
# 方式1:直接用颜色名称初始化Color
sashighlight.fill = PatternFill(fill_type='solid', start_color=Color('yellow'))
# 方式2:用索引颜色(不同索引对应不同预设色,13对应黄色)
# sashighlight.fill = PatternFill(fill_type='solid', start_color=Color(indexed=13))

简单总结下:单元格样式的填充和绘图对象的填充是两套不同的API,别搞混就行,直接用颜色名称字符串是最省心的方案。

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

火山引擎 最新活动