如何在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




