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

Fill cells with colors using openpyxl?

我目前正在为 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(或任何其他单元格)的颜色吗?

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

ws['A1'].fill = redFill 应该没问题。

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

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

样式的 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中定义了一堆颜色常量,如果你需要快速抓取一个。

在 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

要填充 rows/columns 的范围,请执行此操作

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

填充一列的所有行

for cell in ws['A1:{}'.format(ws.max_row)]:
   cell[0].fill = redFill
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)

结果 -

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

Python3.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

我会为 Excel 做的是:

from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill

wb = load_workbook("test.xlsx")
ws = wb.active

ws["A1"].fill = PatternFill("solid", start_color="FFA500")

您可以用另一个单元格替换“A1”,start_color必须是十六进制颜色。