使用openpyxl用颜色填充单元格?

Posted

技术标签:

【中文标题】使用openpyxl用颜色填充单元格?【英文标题】:Fill cells with colors using openpyxl? 【发布时间】:2015-08-09 15:25:30 【问题描述】:

我目前正在为 Python 2.7 使用 openpyxl v2.2.2,我想为单元格设置颜色。我使用了以下导入

import openpyxl,
from openpyxl import Workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell

以下是我尝试使用的代码:

wb = openpyxl.Workbook()
ws = wb.active

redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')

ws['A1'].style = redFill

但我收到以下错误:

Traceback (most recent call last)
  self.font = value.font.copy()
AttributeError: 'PatternFill' object has no attribute 'font'

知道如何使用 openpyxl 为单元格 A1(或任何其他单元格)设置颜色吗?

【问题讨论】:

你能提供完整的追溯 【参考方案1】:

我认为问题在于您正在尝试将填充对象分配给样式。

ws['A1'].fill = redFill 应该可以正常工作。

【讨论】:

谢谢查理。我对 Python 很陌生,openpyxl 文档不清楚如何将填充应用于单元格。您的回答解决了问题。 是否可以将此应用于选择的列,即 IE A1:A5? @CallamDelaney 看我的回答***.com/a/66074706/4094231【参考方案2】:

这对我有用。他们改变了一些东西,你在互联网上看到的大部分帮助都是针对我所看到的旧版本的 openpyxl 库。

# Change background color 
xls_cell.style = Style(fill=PatternFill(patternType='solid',
                                        fill_type='solid', 
                                        fgColor=Color('C4C4C4')))

【讨论】:

有些事情要小心。如果您对单元格进行多项更改,则先前的更改将与最近的更改一起消失。如果要进行 6 项更改,则必须在同一命令中完成所有 6 项更改。你不能一一改变它们。如果您这样做,只会保留最后一次更改。【参考方案3】:

样式 API 再次更改。对我有用的是

my_red = openpyxl.styles.colors.Color(rgb='00FF0000')
my_fill = openpyxl.styles.fills.PatternFill(patternType='solid', fgColor=my_red)
cell.fill = my_fill

颜色是 alpha RGB 十六进制颜色。您可以将其作为 'rrggbb' 传入,默认 alpha 为 00,或者使用 'aarrggbb' 指定 alpha。一堆颜色在openpyxl.styles.colors 中定义为常量,如果您需要快速抓取一个。

【讨论】:

my_fill = openpyxl.styles.fills.PatternFill(patternType='solid', fgColor=my_red)【参考方案4】:

在 python 3.x 中

wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')
ws['A1'].fill = redFill

工作但我不知道在 python 2.x 中我希望工作 只需输入ws['A1'].fill=redFill

【讨论】:

要使 PatternFill 工作,您需要 from openpyxl.styles import PatternFill【参考方案5】:

要填充一系列行/列,请执行此操作

for cell in ws['A1:A100']:
   cell[0].fill = redFill

填充一列的所有行

for cell in ws['A1:'.format(ws.max_row)]:
   cell[0].fill = redFill

【讨论】:

【参考方案6】:
from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill

_file_name = "Test.xlsx"
_sheet_name = "Test_Sheet"

def new_workbook(_file_name, _sheet_name):
    wb = Workbook()  # Workbook Object
    ws = wb.active  # Gets the active worksheet
    ws.title = _sheet_name  # Name the active worksheet

    # Writing the header columns
    ws['A1'] = 'Name'
    ws['B1'] = 'Class'
    ws['C1'] = 'Section'
    ws['D1'] = 'Marks'
    ws['E1'] = 'Age'
    

    col_range = ws.max_column  # get max columns in the worksheet

    # formatting the header columns, filling red color
    for col in range(1, col_range + 1):
        cell_header = ws.cell(1, col)
        cell_header.fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type="solid") #used hex code for red color

    wb.save(_file_name)  # save the workbook
    wb.close()  # close the workbook

if __name__ == '__main__':
new_workbook(_file_name, _sheet_name)

结果 -

【讨论】:

【参考方案7】:

使用嵌套的 for 循环来填充二维范围。

Python 3.9

import openpyxl as op
fill_gen = op.styles.PatternFill(fill_type='solid',
                                 start_color='FFFFFF',
                                 end_color='FFFFFF')
for row in ws["A1:BB50"]:
    for cell in row:
        cell.fill = fill_gen

【讨论】:

以上是关于使用openpyxl用颜色填充单元格?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

5 分钟掌握 openpyxl 操作:Python 轻松处理 Excel

用填充图案填充 DataGridView 单元格

使用自动填充 (Excel) 时保持单元格的颜色

excel使用公式更改单元格背景颜色?

完全解读 OpenPyXL 设置 Excel 单元格样式