excel 向Cell OpenPyXL添加背景颜色

dw1jzc5e  于 2023-03-31  发布在  其他
关注(0)|答案(5)|浏览(150)

我试图使它在我的代码给出了一个绿色的背景上的细胞时,它是“存在”和红色的背景上的细胞,如果它是“缺席”。

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")

这段代码工作完美,我只是想知道我如何才能添加在背景颜色背后的细胞。

yeotifhr

yeotifhr1#

对于openpyxl 2.5.3,上面的代码不起作用。
经过尝试,以下代码工作:

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

lp0sw83n2#

来自文档:

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

c2e8gylq3#

正如@Charlie Clark(openpyxl的合著者)所建议的那样,条件格式可能是一种更好的方式。
如果你想改变背景颜色,从最近的版本关键字bgcolor似乎不起作用(在我的情况下,单元格的颜色最终是黑色)。
相反,您可以使用start_colorfgColor。例如,两种解决方案都可以工作:

from openpyxl.styles import PatternFill
from openpyxl.styles.colors import BLUE

sheet['A1'].fill = PatternFill(start_color="000000FF", fill_type = "solid")
sheet['A1'].fill = PatternFill(fgColor=BLUE, fill_type = "solid")
yrdbyhpb

yrdbyhpb4#

这适用于openpyxl V2.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的单元格着色 *
1sbrub3j

1sbrub3j5#

我很难复制单元格的背景颜色(从一本书中的标签到另一本书中的标签...)
在尝试了很多变通方法之后,我发现这是可行的:

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

相关问题