Python 向单元格OpenPyXL添加背景色

Python 向单元格OpenPyXL添加背景色,python,excel,openpyxl,Python,Excel,Openpyxl,我试图让代码在“存在”时在单元格上显示绿色背景,在“不存在”时在单元格上显示红色背景。这是我的密码 ws1.cell(column=1, row=t, value="%s" % blue_student_list) if (student_check(i)): ws1.cell(column=2, row=t, value="%s" % "Present") else: ws1.cell(column=2, row=t, value="%s" % "Absent") 这段代码完

我试图让代码在“存在”时在单元格上显示绿色背景,在“不存在”时在单元格上显示红色背景。这是我的密码

ws1.cell(column=1, row=t, value="%s" % blue_student_list)
if (student_check(i)):
    ws1.cell(column=2, row=t, value="%s" % "Present")
else:
    ws1.cell(column=2, row=t, value="%s" % "Absent")
这段代码完美无瑕,我只是想知道如何在单元格后面添加背景色。

请参见openpyxl文档。

来自:


使用
openpyxl 2.5.3
,上述代码不起作用

尝试后,以下代码正常工作:

from openpyxl.styles import PatternFill
sheet['A1'].fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type = "solid")
正如@Charlie Clark(openpyxl的合著者)所言,条件格式可能是一种更好的方式。更多信息请参阅

如果要更改背景颜色,从较新的版本来看,关键字
bgcolor
似乎不起作用(在我的情况下,单元格的颜色最终变为黑色)

相反,您可以使用
start\u color
fgColor
。例如,两种解决方案都有效:

从openpyxl.styles导入填充图案
从openpyxl.styles.colors导入黄色
活页['A1']。填充=图案填充(开始颜色=“FFC7CE”,填充类型=“实心”)
活页['A1']。填充=图案填充(fgColor=黄色,填充类型=“实心”)

它将起作用。

这是针对openpyxl 2.6及以上版本的


from openpyxl.styles import PatternFill

for col_range in range(1, 12):
    cell_title = sheet.cell(1, col_range)
    cell_title.fill = PatternFill(start_color="8a2be2", end_color="8a2be2", fill_type="solid")


这将使单元格从A1到K1上色

我很难复制单元格的背景色(从一本书的标签到另一本书的标签…)

经过多次尝试,我发现这是可行的:

 from openpyxl.styles import PatternFill
 from openpyxl.styles.colors import COLOR_INDEX
 from copy import copy as shallow_copy, deepcopy as deep_copy
 # .
 # .
 # .
 if from_cell.has_style:
    if isinstance(from_cell.fill.start_color.index, int):
       start_color=COLOR_INDEX[from_cell.fill.start_color.index]

    else: # _sometimes_ a string...
          start_color=from_cell.fill.start_color.index

    end_color=start_color
    to_cell.fill=shallow_copy(PatternFill(fill_type=from_cell.fill.fill_type,
                                          start_color=start_color,
                                          end_color=end_color,
                                          patternType=from_cell.fill.patternType
                                 )
                     )

仅供参考:openpyxl是一款很棒的产品;我认为很多开发人员没有意识到使用它有什么可能。我将支持这个项目


我想也许很多开发者错误地认为它是反开源的;但是xlsx文档也由LibreOffice呈现…

Thy bro!在我的例子中,
end\u颜色
没有用。它可能仅在定义渐变时使用。您也可以使用
fgColor
(恰好更短,因此更容易粘贴到更短的代码行)。这也可以应用于向图表添加透明度吗?从当前禁用的“it Beeken YELLOW”快捷方式ConstantinDect来看,您可以改为使用RGBA颜色字符串。对于我来说
bgColor
不起作用,但是
start\u color
和no
end\u color
worked@mapto我也是。否则它会变黑。

from openpyxl.styles import PatternFill

for col_range in range(1, 12):
    cell_title = sheet.cell(1, col_range)
    cell_title.fill = PatternFill(start_color="8a2be2", end_color="8a2be2", fill_type="solid")

 from openpyxl.styles import PatternFill
 from openpyxl.styles.colors import COLOR_INDEX
 from copy import copy as shallow_copy, deepcopy as deep_copy
 # .
 # .
 # .
 if from_cell.has_style:
    if isinstance(from_cell.fill.start_color.index, int):
       start_color=COLOR_INDEX[from_cell.fill.start_color.index]

    else: # _sometimes_ a string...
          start_color=from_cell.fill.start_color.index

    end_color=start_color
    to_cell.fill=shallow_copy(PatternFill(fill_type=from_cell.fill.fill_type,
                                          start_color=start_color,
                                          end_color=end_color,
                                          patternType=from_cell.fill.patternType
                                 )
                     )