pin_drop当前位置:知识文库 ❯ 图文

Python openpyxl样式设置详解:打造专业美观Excel报表教程

openpyxl的样式系统允许对单元格的字体、填充、边框、对齐、数字格式等进行精细控制。样式通过Font、PatternFill、Border、Alignment、numbers等类定义,可以创建专业美观的Excel报表。样式可以应用到单个单元格或命名样式批量应用。


一、概述

在生成Excel报表时,纯数据表格往往显得单调乏味。通过设置字体样式、背景颜色、边框、对齐方式和数字格式,可以大大提升报表的可读性和专业感。openpyxl提供了完整的样式系统,让你能够像使用Excel界面一样精细控制单元格的外观。无论是简单的加粗标题,还是复杂的条件格式化,都能轻松实现。

二、语法总览

在设置样式前,需要先导入相关的样式类:

代码示例

from openpyxl.styles import Font, PatternFill, Border, Side, Alignment

# 设置字体
cell.font = Font(name='Arial', size=12, bold=True)

# 设置填充
cell.fill = PatternFill(start_color='FF0000', fill_type='solid')

# 设置边框
cell.border = Border(left=Side(style='thin'))

# 设置对齐
cell.alignment = Alignment(horizontal='center', vertical='center')

# 设置数字格式
cell.number_format = '#,##0.00'

三、样式参数详解

Font(字体)参数

参数 类型 默认值 说明
name str 'Calibri' 字体名称,如'Arial'、'微软雅黑'
size int 11 字体大小
bold bool False 是否加粗
italic bool False 是否斜体
underline str None 下划线:'single'/'double'
strike bool False 删除线
color str '000000' 字体颜色(RGB十六进制)

PatternFill(填充)参数

参数 类型 默认值 说明
fill_type str None 填充类型:'solid'/'darkDown'等
start_color str '000000' 前景色(RGB十六进制)
end_color str '000000' 背景色

Alignment(对齐)参数

参数 类型 默认值 说明
horizontal str 'general' 水平对齐:'left'/'center'/'right'
vertical str 'bottom' 垂直对齐:'top'/'center'/'bottom'
wrap_text bool False 自动换行
shrink_to_fit bool False 缩小字体填充

Border/Side(边框)参数

参数 类型 默认值 说明
style str None 线型:'thin'/'medium'/'thick'/'double'
color str '000000' 边框颜色(RGB十六进制)

四、返回值说明

样式设置直接修改单元格属性,无返回值。设置完成后需要调用wb.save()保存文件才能看到样式效果。

五、代码示例

示例1:字体与填充样式

演示如何设置不同的字体样式(加粗、斜体、下划线、颜色)和单元格背景填充。

代码示例

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill

wb = Workbook()
ws = wb.active

# 字体样式
ws['A1'] = '加粗标题'
ws['A1'].font = Font(name='微软雅黑', size=16, bold=True, color='2196F3')

ws['A2'] = '斜体文字'
ws['A2'].font = Font(size=12, italic=True, color='FF5722')

ws['A3'] = '下划线文字'
ws['A3'].font = Font(size=12, underline='single')

# 填充样式
ws['B1'] = '红色背景'
ws['B1'].fill = PatternFill(start_color='FFCDD2', end_color='FFCDD2', fill_type='solid')

ws['B2'] = '蓝色背景'
ws['B2'].fill = PatternFill(start_color='BBDEFB', end_color='BBDEFB', fill_type='solid')

ws['B3'] = '绿色背景'
ws['B3'].fill = PatternFill(start_color='C8E6C9', end_color='C8E6C9', fill_type='solid')

print("样式设置完成")
wb.save('font_fill_style.xlsx')
print("字体填充样式文件已保存")

输出结果:

代码示例

样式设置完成
字体填充样式文件已保存

示例2:边框与对齐样式

演示如何定义边框样式并应用到表格,同时设置表头和数据区域的对齐方式。

代码示例

from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side, Alignment, PatternFill

wb = Workbook()
ws = wb.active

# 定义边框样式
thin_border = Border(
    left=Side(style='thin'),
    right=Side(style='thin'),
    top=Side(style='thin'),
    bottom=Side(style='thin')
)

thick_bottom = Border(
    bottom=Side(style='medium')
)

# 表头样式
header_font = Font(name='微软雅黑', size=12, bold=True, color='FFFFFF')
header_fill = PatternFill(start_color='2196F3', end_color='2196F3', fill_type='solid')
header_align = Alignment(horizontal='center', vertical='center')

# 写入表头
headers = ['编号', '姓名', '部门', '工资']
for col, header in enumerate(headers, 1):
    cell = ws.cell(row=1, column=col, value=header)
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = header_align
    cell.border = thin_border

# 写入数据
data = [
    [1, '张三', '技术部', 15000],
    [2, '李四', '市场部', 12000],
    [3, '王五', '技术部', 18000],
]
data_align = Alignment(horizontal='center', vertical='center')
for r, row_data in enumerate(data, 2):
    for c, value in enumerate(row_data, 1):
        cell = ws.cell(row=r, column=c, value=value)
        cell.border = thin_border
        cell.alignment = data_align

# 设置列宽
ws.column_dimensions['A'].width = 10
ws.column_dimensions['B'].width = 12
ws.column_dimensions['C'].width = 12
ws.column_dimensions['D'].width = 12

wb.save('border_align_style.xlsx')
print("边框对齐样式文件已保存")

输出结果:

代码示例

边框对齐样式文件已保存

示例3:数字格式与命名样式

演示如何设置数字显示格式(千分位、百分比、货币),以及如何使用命名样式实现样式复用。

代码示例

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment, NamedStyle

wb = Workbook()
ws = wb.active

# 数字格式
ws['A1'] = '数字格式示例'
ws['A2'] = 1234567.89
ws['A2'].number_format = '#,##0.00'  # 千分位+2位小数

ws['A3'] = 0.85
ws['A3'].number_format = '0.0%'  # 百分比

ws['A4'] = 15000
ws['A4'].number_format = '\u00a5#,##0'  # 货币格式

# 命名样式(可复用)
highlight_style = NamedStyle(name='highlight')
highlight_style.font = Font(bold=True, color='FF0000')
highlight_style.fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')

# 注册并使用命名样式
wb.add_named_style(highlight_style)
ws['B1'] = '重要数据'
ws['B1'].style = 'highlight'

ws['B2'] = '另一个重要数据'
ws['B2'].style = 'highlight'

print("数字格式与命名样式设置完成")
wb.save('number_named_style.xlsx')
print("数字格式样式文件已保存")

输出结果:

代码示例

数字格式与命名样式设置完成
数字格式样式文件已保存

六、实际应用场景

  • 报表美化:设置表头加粗、蓝色背景、居中对齐,提升报表专业感和可读性

  • 财务报表:使用货币格式和千分位格式显示金额,使财务数据更易读

  • 数据标注:使用命名样式统一标记重要数据或异常数据,快速识别关键信息

七、注意事项

注意:PatternFill的fill_type必须设置为'solid'才能显示背景色,否则填充不会生效。

注意:颜色值使用RGB十六进制格式(如'FF0000'为红色),不含#号,与HTML颜色格式不同。

注意:命名样式注册后可复用,避免重复创建样式对象,提高代码效率和可维护性。

八、样式类对比

样式类 控制内容 常用属性
Font 字体 name, size, bold, color
PatternFill 填充 start_color, fill_type
Border 边框 left, right, top, bottom
Alignment 对齐 horizontal, vertical, wrap_text
NamedStyle 命名样式 可包含以上所有样式

九、小结

  • Font控制字体样式(名称、大小、粗体、颜色等),是最常用的样式类

  • PatternFill设置背景填充,fill_type='solid'为纯色填充,颜色值为RGB十六进制不含#号

  • Border和Side配合设置边框,Alignment设置对齐方式,数字格式通过number_format属性设置

  • NamedStyle定义可复用样式,注册后通过cell.style='样式名'应用,提高代码复用性

十、练习题

练习1

创建一个表头,设置字体为微软雅黑、16号、加粗、蓝色,背景为浅蓝色。

练习2

创建一个3x3的数据表,为所有单元格设置细边框和居中对齐。

练习3

创建一个命名样式"money",包含货币数字格式和加粗字体,应用到多个单元格。


常见问题

为什么设置了PatternFill背景色但没有显示?

最常见的原因是忘记设置fill_type='solid'。PatternFill的fill_type默认为None,必须显式设置为'solid'才能显示纯色背景。正确写法:PatternFill(start_color='FF0000', fill_type='solid')。

命名样式和普通样式有什么区别?

普通样式每次都需要创建新的样式对象并逐个设置属性。命名样式通过NamedStyle创建,注册到工作簿后可以重复使用。对于需要在多个单元格应用相同样式的场景,命名样式更简洁高效。

如何批量设置一个区域的所有单元格样式?

使用嵌套循环遍历目标区域,逐个设置样式。例如:for row in ws.iter_rows(min_row=1, max_row=10, min_col=1, max_col=5): for cell in row: cell.font = Font(bold=True)。也可以先定义样式变量,然后循环中复用。

颜色值为什么要用十六进制而不是RGB元组?

openpyxl遵循Excel的颜色表示方式,使用RGB十六进制字符串。例如红色为'FF0000',蓝色为'0000FF'。这与HTML/CSS中使用#FF0000的格式类似,但不需要#号前缀。这种格式在Excel内部表示中更加标准。

number_format有哪些常用的数字格式?

常用格式包括:'0'(整数)、'0.00'(2位小数)、'#,##0.00'(千分位+2位小数)、'0%'(百分比)、'YYYY-MM-DD'(日期)、'\u00a5#,##0'(人民币货币)、'0.00E+00'(科学计数法)等。可以根据需要组合使用。


标签: openpyxl 样式设置 Font PatternFill Excel报表美化 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python openpyxl批量操作详解:高效处理大量Excel数据教程 下一篇: openpyxl合并单元格详解 - merge_cells用法与复杂表头制作

poll相关推荐