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

Python 使用openpyxl用颜色填充单元格?,python,openpyxl,Python,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 = ope

我目前正在为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十六进制颜色。您可以将其作为默认alpha值为00的
'rrggbb'
传入,或使用
'aarrggbb'
指定alpha值。如果您需要快速获取一组颜色,则在
openpyxl.styles.colors
中会将一组颜色定义为常量。

在Python3.x中

wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')
ws['A1'].fill = redFill
这是可行的,但我不知道在Python2.x中我希望是可行的
只需放置ws['A1'].fill=redFill

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

for cell in ws['A1:A100']:
   cell[0].fill = redFill
填充列的所有行的步骤

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

结果-你能提供完整的追踪结果吗?谢谢Charlie。我对Python非常陌生,openpyxl文档不清楚如何将填充应用于单元格。您的答案解决了问题。是否可以将此应用于选定的列,即A1:A5?@CallamDelaney查看我的答案需要小心。如果对单元格进行多次更改,则以前的更改将与最近的更改一起擦除。如果要进行6次更改,则必须在同一命令中执行所有6次。你不能一个一个地改变它们。如果执行此操作,则最后一次更改将保持不变。my_fill=openpyxl.styles.fills.PatternFill(patternType='solid',fgColor=my_red)要使PatternFill工作,您需要从openpyxl.styles导入PatternFill
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)