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

svgewumm  于 2023-01-04  发布在  Python
关注(0)|答案(8)|浏览(247)

我目前使用的是openpyxl v2.2.2 for Python 2.7,我想设置单元格的颜色。

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(或任何其他单元格)设置颜色有什么想法吗?

eanckbw9

eanckbw91#

我认为问题是你试图将一个填充对象分配给一个样式。
ws['A1'].fill = redFill应该工作正常。

bvn4nwqk

bvn4nwqk2#

样式的API又一次改变了。对我有效的是

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

Color是一种alpha RGB十六进制颜色。你可以用'rrggbb'的形式传入,默认alpha为00,或者用'aarrggbb'指定alpha。如果你需要快速获取一种颜色,可以在openpyxl.styles.colors中将一堆颜色定义为常量。

deyfvvtc

deyfvvtc3#

这对我很有效。他们改变了一些东西,你在网上看到的大多数帮助都是针对我所看到的旧版本的openpyxl库。

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

h9vpoimq4#

在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

xwmevbvl

xwmevbvl5#

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)

结果-x1c 0d1x

c3frrgcw

c3frrgcw6#

对于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必须是十六进制颜色。

cqoc49vn

cqoc49vn7#

要填充行/列范围,请执行以下操作

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

填充列的所有行

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

jfgube3f8#

使用嵌套的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

相关问题