向Cell OpenPyXL添加背景颜色

时间:2016-03-10 13:55:43

标签: 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")

这段代码完美无缺,我只是想知道如何添加单元格后面的背景颜色。

7 个答案:

答案 0 :(得分:7)

此处openpyxl 2.5.3,上面的代码无效。

尝试后,代码工作:

from openpyxl.styles import PatternFill
sheet['A1'].fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type = "solid")

答案 1 :(得分:5)

来自文档

    from openpyxl.styles import PatternFill

    sheet['A1'].fill = PatternFill(bgColor="FFC7CE", fill_type = "solid")

希望这会有所帮助。

答案 2 :(得分:2)

就像@charlie Clark( openpyxl 的合著者)所建议的那样,条件格式可能是一种更好的选择。

如果要更改背景颜色,请使用较新的版本,关键字bgcolor似乎无效(在我的情况下,该单元格的颜色最终变为黑色)。

您可以使用start_colorfgColor。例如,两种解决方案都可以工作:

from openpyxl.styles import PatternFill
from openpyxl.styles.colors YELLOW

sheet['A1'].fill = PatternFill(start_color="FFC7CE", fill_type = "solid")
sheet['A1'].fill = PatternFill(fgColor=YELLOW, fill_type = "solid")

答案 3 :(得分:0)

请参阅openpyxl文档中的Conditional Formatting

答案 4 :(得分:0)

from openpyxl.styles import PatternFill
sheet['A1'].fill = PatternFill(start_color="FFC7CE", fill_type = "solid")

它将起作用。

答案 5 :(得分:0)

这是针对openpyxl V 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的单元格着色

答案 6 :(得分:0)

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

在尝试了许多变通办法之后,我发现这可行:

 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呈现的...