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(字体)参数
PatternFill(填充)参数
Alignment(对齐)参数
Border/Side(边框)参数
四、返回值说明
样式设置直接修改单元格属性,无返回值。设置完成后需要调用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控制字体样式(名称、大小、粗体、颜色等),是最常用的样式类
-
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'(科学计数法)等。可以根据需要组合使用。
本文涉及AI创作
内容由AI创作,请仔细甄别