使用 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必须是十六进制颜色。
我目前正在为 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必须是十六进制颜色。