Cómo dar estilo a celdas con Aspose.Cells FOSS en Python
Aspose.Cells FOSS for Python te permite aplicar estilos de fuente y rellenos de fondo a celdas individuales usando el cell.style.font y cell.style.fill APIs. Los colores se expresan como 8-digit AARRGGBB hex strings; por ejemplo "FFFF0000" para rojo opaco, sin # prefijo. Todo el estilo se realiza en puro Python sin dependencia de Microsoft Excel ni de ninguna biblioteca de renderizado externa.
¿Por qué dar estilo a celdas con Aspose.Cells FOSS?
- No se requiere Excel: El formato se ejecuta completamente en Python en cualquier OS.
- Modelo de color consistente: Una única cadena de 8 dígitos AARRGGBB cubre el color de fuente y el color de relleno con el mismo formato.
- Nombres de propiedades legibles:
bold,italic,underline,strikethrough: nois_prefijo para recordar. - Objetos de fuente reutilizables: Crear un
Fontinstancia una vez y aplícala a muchas celdas para una marca consistente.
Guía paso a paso
Paso 1: Instale Aspose.Cells FOSS para Python
pip install aspose-cells-fossNo se requieren paquetes del sistema adicionales. Importa las clases que necesites de aspose.cells_foss:
from aspose.cells_foss import Workbook, Cell, Font, SaveFormatPaso 2: Establecer el nombre y tamaño de la fuente
Accede a una celda a través de ws.cells["address"] y escribe en cell.style.font.name y cell.style.font.size.
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"].value = "Styled Header"
cell = ws.cells["A1"]
cell.style.font.name = "Arial"
cell.style.font.size = 14
workbook.save("styled.xlsx")La fuente predeterminada es Calibri a 11pt. Cualquier nombre de fuente disponible en el sistema donde se abrirá el archivo puede usarse; especificar una fuente que no esté instalada no produce un error, pero puede renderizarse con una fuente de respaldo cuando se abra el archivo.
Paso 3: Establecer el color de la fuente usando una cadena hexadecimal AARRGGBB
Los colores de fuente se establecen con un 8-digit hexadecimal string en AARRGGBB orden (Alfa, Rojo, Verde, Azul). Haga no incluya un # prefijo.
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"].value = "Red text"
ws.cells["A1"].style.font.color = "FFFF0000" # opaque red
ws.cells["A2"].value = "Blue text"
ws.cells["A2"].style.font.color = "FF0000FF" # opaque blue
ws.cells["A3"].value = "Green text"
ws.cells["A3"].style.font.color = "FF00FF00" # opaque green
workbook.save("colored_text.xlsx")Referencia de colores AARRGGBB comunes:
| Color | cadena AARRGGBB | Notas |
|---|---|---|
| Negro | FF000000 | Color de fuente predeterminado |
| Blanco | FFFFFFFF | Usar en fondos oscuros |
| Rojo | FFFF0000 | Texto de alerta o resaltado |
| Azul | FF0000FF | Enlaces o énfasis |
| Verde | FF00FF00 | Valores positivos o éxito |
| Naranja | FFFF8000 | Texto de advertencia |
| Gris | FF808080 | Texto atenuado o deshabilitado |
| Azul marino | FF1E64C8 | Azul corporativo / de marca |
Los dos primeros dígitos hexadecimales son el canal alfa. Use FF para opaco total. Los valores por debajo FF producen resultados semitransparentes en los renderizadores que admiten mezcla alfa.
Paso 4: Aplicar negrita, cursiva, subrayado y tachado
Establezca cada atributo directamente como un booleano. Los nombres de las propiedades son bold, italic, underline, y strikethrough; haga no usar is_bold o is_italic (esos nombres no existen en la API FOSS y generarán AttributeError).
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"].value = "Bold"
ws.cells["A1"].style.font.bold = True
ws.cells["A2"].value = "Italic"
ws.cells["A2"].style.font.italic = True
ws.cells["A3"].value = "Underline"
ws.cells["A3"].style.font.underline = True
ws.cells["A4"].value = "Strikethrough"
ws.cells["A4"].style.font.strikethrough = True
ws.cells["A5"].value = "Bold + Italic"
ws.cells["A5"].style.font.bold = True
ws.cells["A5"].style.font.italic = True
workbook.save("font_styles.xlsx")Las cuatro banderas predeterminadas son False. Pueden combinarse libremente en la misma celda.
Paso 5: Establecer un color de relleno de fondo sólido
Usa cell.style.fill.set_solid_fill("AARRGGBB") para aplicar un relleno de fondo. El formato de color es la misma cadena hexadecimal de 8 dígitos AARRGGBB que el color de fuente.
Para eliminar un relleno por completo, llama a cell.style.fill.set_no_fill().
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"].value = "Navy background"
ws.cells["A1"].style.fill.set_solid_fill("FF1E64C8") # opaque navy blue
ws.cells["A2"].value = "Light yellow background"
ws.cells["A2"].style.fill.set_solid_fill("FFFFFFCC") # pale yellow
ws.cells["A3"].value = "No fill"
ws.cells["A3"].style.fill.set_no_fill() # remove any fill
workbook.save("cell_fills.xlsx")set_solid_fill() y set_no_fill() son mutuamente excluyentes; llamar a una sobrescribe a la otra en la misma celda.
Paso 6: Combinar múltiples estilos en una celda
Puede encadenar cualquier número de propiedades de estilo en la misma referencia de celda. No hay límite en la cantidad de atributos de estilo que se pueden establecer antes de guardar.
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["B2"].value = "Branded Header"
cell = ws.cells["B2"]
##Font
cell.style.font.name = "Arial"
cell.style.font.size = 16
cell.style.font.bold = True
cell.style.font.color = "FFFFFFFF" # white text
##Background
cell.style.fill.set_solid_fill("FF1E64C8") # navy fill
workbook.save("branded_header.xlsx")
print("Branded header cell saved.")Esto produce una etiqueta blanca, en negrita, de 16 pt Arial sobre un fondo azul marino, un patrón común para los encabezados de columna.
Paso 7: Utilizar el constructor Font para estilos reutilizables
El Font la clase puede instanciarse con todas sus propiedades en una sola llamada, y luego asignarse a múltiples celdas. Esto es útil cuando deseas un estilo de casa consistente aplicado a muchas celdas sin repetir las mismas asignaciones de propiedades.
from aspose.cells_foss import Workbook, Font
workbook = Workbook()
ws = workbook.worksheets[0]
##Define a reusable heading font
heading_font = Font(
name="Arial",
size=14,
color="FF1E64C8", # navy
bold=True,
italic=False,
underline=False,
strikethrough=False
)
##Define a reusable body font
body_font = Font(
name="Calibri",
size=11,
color="FF000000", # black (default)
bold=False,
italic=False,
underline=False,
strikethrough=False
)
##Apply heading font to header row
headers = ["Product", "SKU", "Price", "Stock"]
for col, header in enumerate(headers):
addr = f"{chr(65 + col)}1"
ws.cells[addr].value = header
ws.cells[addr].style.font = heading_font
ws.cells[addr].style.fill.set_solid_fill("FFE8EFF9") # light blue tint
##Apply body font to data rows
data = [
("Widget A", "WGT-001", 9.99, 150),
("Widget B", "WGT-002", 14.99, 87),
("Widget C", "WGT-003", 4.49, 320),
]
for row_idx, (name, sku, price, stock) in enumerate(data, start=2):
ws.cells[f"A{row_idx}"].value = name
ws.cells[f"B{row_idx}"].value = sku
ws.cells[f"C{row_idx}"].value = price
ws.cells[f"D{row_idx}"].value = stock
for col in "ABCD":
ws.cells[f"{col}{row_idx}"].style.font = body_font
workbook.save("product_table.xlsx")
print("Product table with reusable fonts saved.")Valores predeterminados del constructor Font (todos los parámetros son opcionales):
| Parámetro | Predeterminado |
|---|---|
name | "Calibri" |
size | 11 |
color | "FF000000" |
bold | False |
italic | False |
underline | False |
strikethrough | False |
Ejemplo completo y funcional
El siguiente script autónomo crea un libro de trabajo con una fila de encabezado con estilo, filas de datos coloreadas y una celda de resumen que demuestra todas las API de estilo cubiertas arriba:
from aspose.cells_foss import Workbook, Cell, Font, SaveFormat
workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Report"
##--- Header row (bold, white text on navy background) ---
headers = ["Region", "Q1", "Q2", "Q3", "Q4", "Total"]
for col, text in enumerate(headers):
addr = f"{chr(65 + col)}1"
ws.cells[addr].value = text
ws.cells[addr].style.font.name = "Arial"
ws.cells[addr].style.font.size = 12
ws.cells[addr].style.font.bold = True
ws.cells[addr].style.font.color = "FFFFFFFF" # white
ws.cells[addr].style.fill.set_solid_fill("FF1E64C8") # navy
##--- Data rows ---
data = [
("North", 42000, 47500, 53000, 61000),
("South", 31000, 28500, 35000, 39000),
("East", 55000, 62000, 58000, 71000),
("West", 27000, 30000, 33000, 41000),
]
for row_idx, (region, q1, q2, q3, q4) in enumerate(data, start=2):
ws.cells[f"A{row_idx}"].value = region
ws.cells[f"B{row_idx}"].value = q1
ws.cells[f"C{row_idx}"].value = q2
ws.cells[f"D{row_idx}"].value = q3
ws.cells[f"E{row_idx}"].value = q4
# Total formula
ws.cells[f"F{row_idx}"] = Cell(None, f"=SUM(B{row_idx}:E{row_idx})")
# Alternate row shading
if row_idx % 2 == 0:
for col in "ABCDEF":
ws.cells[f"{col}{row_idx}"].style.fill.set_solid_fill("FFE8EFF9")
##--- Italic note in a footer cell ---
ws.cells["A7"].value = "All values in USD"
ws.cells["A7"].style.font.italic = True
ws.cells["A7"].style.font.color = "FF808080" # gray
ws.cells["A7"].style.font.size = 9
##--- Strikethrough on a deprecated label ---
ws.cells["A8"].value = "Old metric (deprecated)"
ws.cells["A8"].style.font.strikethrough = True
ws.cells["A8"].style.font.color = "FF808080"
workbook.save("sales_report_styled.xlsx", SaveFormat.XLSX)
print("Styled sales report saved.")Problemas comunes
Formato de color incorrecto: usando #RRGGBB en lugar de AARRGGBB
Un # (p.ej. "#FF0000") o una cadena RGB de 6 dígitos no producirá el color esperado. La propiedad espera exactamente 8 hex digits with no prefix: "FFFF0000". Los dos primeros dígitos son el canal alfa; usa FF para totalmente opaco.
AttributeError: 'Font' object has no attribute 'is_bold'
La API FOSS usa bold, italic, underline, y strikethrough como los nombres de propiedad. El is_bold / is_italic la convención de nombres pertenece a una biblioteca diferente y no existe aquí. Reemplace cualquier is_bold referencia con bold.
Los cambios de estilo no son visibles después de guardar
Asegúrese de establecer las propiedades de estilo en el objeto celda antes de llamar a workbook.save(). Establecer una propiedad en una celda después de la llamada a save no tiene efecto en el archivo ya escrito. Si reutiliza una cell variable, confirme que aún se refiere a la dirección de celda correcta.
El relleno y la fuente en la misma celda entran en conflicto visualmente
No hay conflicto de API; siempre puedes establecer ambos cell.style.font.color y cell.style.fill.set_solid_fill() de forma independiente. Asegúrate de que el color del texto tenga suficiente contraste con el color de fondo. Texto blanco (FFFFFFFF) sobre un relleno oscuro como azul marino (FF1E64C8) es una combinación fiable.
Preguntas frecuentes
¿Cómo elimino un relleno de fondo y devuelvo una celda a sin relleno?
Llama a cell.style.fill.set_no_fill(). Esto elimina cualquier relleno sólido previamente establecido de la celda.
¿Cómo restablezco una celda a la fuente predeterminada (Calibri 11 pt negro)?
Vuelva a asignar los valores predeterminados explícitamente:
cell.style.font.name = "Calibri"
cell.style.font.size = 11
cell.style.font.color = "FF000000"
cell.style.font.bold = False
cell.style.font.italic = False
cell.style.font.underline = False
cell.style.font.strikethrough = FalseAlternativamente, crea un Font() instancia sin argumentos (todos los valores predeterminados) y asígnala: cell.style.font = Font().
¿Puedo aplicar el mismo estilo de fuente a un rango de celdas en un bucle?
Sí. Itera sobre las direcciones de las celdas y establece las mismas propiedades en cada una. Si utilizas el Font constructor para crear un compartido Font objeto, asígnalo a cada celda con ws.cells[addr].style.font = my_font.
¿El estilo afecta a los valores o fórmulas de las celdas?
No. El estilo es metadata visual pura. cell.style.font y cell.style.fill no tocar .value o .formula.
¿Qué formatos de guardado preservan los estilos?
Los estilos se conservan completamente al guardar en SaveFormat.XLSX. El SaveFormat.CSV, SaveFormat.TSV, SaveFormat.JSON, y SaveFormat.MARKDOWN los formatos son formatos de texto plano o texto estructurado y no transportan información de estilo.
Recursos relacionados:
- Aspose.Cells FOSS for Python: Developer Guide
- Operaciones de hoja de cálculo
- Cómo cargar hojas de cálculo en Python
- Cómo crear gráficos en Python
- Referencia de API: Font, Fill, Style
- Resumen del producto: Resumen de características y capacidades
- Blog: Presentando Aspose.Cells FOSS: Visión general de la biblioteca y guía rápida