Ahmed Rashad
Actualmente estoy usando openpyxl v2.2.2 para Python 2.7 y quería establecer colores en las celdas. He usado las siguientes importaciones
import openpyxl,
from openpyxl import Workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell
y el siguiente es el código que intenté usar:
wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color="FFFF0000",
end_color="FFFF0000",
fill_type="solid")
ws['A1'].style = redFill
pero me sale el siguiente error:
Traceback (most recent call last)
self.font = value.font.copy()
AttributeError: 'PatternFill' object has no attribute 'font'
¿Alguna idea sobre cómo configurar la celda A1 (o cualquier otra celda) con colores usando openpyxl?
charlie clark
Creo que el problema es que estás intentando asignar un objeto de relleno a un estilo.
ws['A1'].fill = redFill
debería funcionar bien
-
gracias charlie Soy bastante nuevo en Python y los documentos de openpyxl no tenían claro cómo aplicar el relleno a una celda. Tu respuesta ha resuelto el problema.
– Ahmed Rashad
28 de mayo de 2015 a las 8:12
-
¿Es posible aplicar esto a una selección de columnas, IE A1:A5?
– Callam Delaney
7 mayo 2019 a las 23:07
-
@CallamDelaney mira mi respuesta stackoverflow.com/a/66074706/4094231
– Umair Ayub
6 de febrero de 2021 a las 7:55
ldrg
La API para estilos cambió una vez más. Lo que funcionó para mí fue
my_red = openpyxl.styles.colors.Color(rgb='00FF0000')
my_fill = openpyxl.styles.fills.PatternFill(patternType="solid", fgColor=my_red)
cell.fill = my_fill
El color es un color hexadecimal RGB alfa. Puedes pasarlo como 'rrggbb'
con un alfa predeterminado de 00 o especifique el alfa con 'aarrggbb'
. Un montón de colores se definen como constantes en openpyxl.styles.colors
si necesita tomar uno rápidamente.
-
my_fill = openpyxl.styles.fills.PatternFill(patternType=’solid’, fgColor=my_red)
– Gourav Chawla
20 de octubre de 2017 a las 13:34
Cabeza MT
Esto funcionó para mí. Cambiaron las cosas y la mayor parte de la ayuda que ves en Internet es para versiones anteriores de la biblioteca openpyxl por lo que estoy viendo.
# Change background color
xls_cell.style = Style(fill=PatternFill(patternType="solid",
fill_type="solid",
fgColor=Color('C4C4C4')))
-
Algo con lo que tener cuidado. Si realiza varios cambios en la celda, los cambios anteriores se borran con los cambios más recientes. Si desea realizar, por ejemplo, 6 cambios, debe realizar los 6 en el mismo comando. No puedes cambiarlos uno por uno. Si lo hace, solo persistirá el último cambio.
– Jefe de MT
08/09/2016 a las 21:24
ismail
en pitón 3.x
wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color="FFFF0000",
end_color="FFFF0000",
fill_type="solid")
ws['A1'].fill = redFill
eso funciona pero no sé en python 2.xi espero que funcione solo pon ws['A1'].fill=redFill
tuurtje11
Lo que haría para Excel es esto:
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")
Puede reemplazar “A1” con otra celda y start_color tiene que ser un color hexadecimal.
Umair Ayub
Para llenar un rango de filas/columnas, haga esto
for cell in ws['A1:A100']:
cell[0].fill = redFill
Para llenar todas las filas de una columna
for cell in ws['A1:{}'.format(ws.max_row)]:
cell[0].fill = redFill
RITA KUSHWAHA
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)
¿Podría proporcionar el seguimiento completo
– El sexto sentido
27 mayo 2015 a las 13:45