预定义样式¶
本页面介绍如何使用Symphra Excel提供的预定义样式,快速为Excel单元格应用专业的外观。
概述¶
预定义样式是经过精心设计的单元格样式集合,涵盖了常见的表格、报告和数据展示场景。使用预定义样式可以快速提升Excel文档的视觉效果,无需手动配置每个样式属性。
可用样式¶
Symphra Excel提供以下预定义样式:
| 样式名称 | 用途 | 特点 |
|---|---|---|
header_style() |
表头 | 粗体、蓝色背景、居中 |
title_style() |
大标题 | 大号粗体、居中 |
subtitle_style() |
副标题 | 中号粗体、居中 |
data_style() |
标准数据 | 左对齐、边框 |
number_style() |
数字数据 | 右对齐、千分位、边框 |
currency_style() |
货币 | 会计格式、右对齐 |
date_style() |
日期 | 居中、日期格式 |
percentage_style() |
百分比 | 右对齐、百分比格式 |
error_style() |
错误信息 | 红色背景、白色文字 |
warning_style() |
警告信息 | 黄色背景、黑色文字 |
success_style() |
成功信息 | 绿色背景、白色文字 |
info_style() |
信息 | 浅蓝色背景、黑色文字 |
基本用法¶
导入样式¶
# 导入预定义样式集合
from symphra_excel.styles.predefined_styles import PredefinedStyles
# 或者导入具体样式
from symphra_excel.styles import PredefinedStyles
应用预定义样式¶
from symphra_excel import Workbook
from symphra_excel.styles import PredefinedStyles
wb = Workbook()
sheet = wb.create_worksheet("数据")
# 应用表头样式
header_style = PredefinedStyles.header_style()
cell = sheet.get_cell("A1")
sheet.apply_style(cell, header_style)
# 应用数据样式
data_style = PredefinedStyles.data_style()
cell = sheet.get_cell("A2")
sheet.apply_style(cell, data_style)
详细样式说明¶
header_style() - 表头样式¶
# 获取表头样式
header = PredefinedStyles.header_style()
# 特点:
# - 字体:Arial, 12px, 粗体, 白色
# - 背景:浅蓝色
# - 对齐:水平居中、垂直居中
# - 边框:底部细线、黑色
# 使用示例
sheet.set_cell_value("A1", "产品名称")
sheet.set_cell_value("B1", "价格")
sheet.set_cell_value("C1", "库存")
# 应用表头样式到所有表头
for col in ["A", "B", "C"]:
cell = sheet.get_cell(f"{col}1")
sheet.apply_style(cell, PredefinedStyles.header_style())
title_style() - 大标题样式¶
# 获取大标题样式
title = PredefinedStyles.title_style()
# 特点:
# - 字体:Arial, 16px, 粗体
# - 对齐:水平居中、垂直居中
# 使用示例
sheet.merge_cells("A1:C1") # 合并单元格
sheet.set_cell_value("A1", "2024年度报告")
sheet.apply_style(sheet.get_cell("A1"), PredefinedStyles.title_style())
subtitle_style() - 副标题样式¶
# 获取副标题样式
subtitle = PredefinedStyles.subtitle_style()
# 特点:
# - 字体:Arial, 14px, 粗体
# - 对齐:水平居中、垂直居中
# 使用示例
sheet.set_cell_value("A2", "第一季度的销售情况")
sheet.apply_style(sheet.get_cell("A2"), PredefinedStyles.subtitle_style())
data_style() - 标准数据样式¶
# 获取数据样式
data = PredefinedStyles.data_style()
# 特点:
# - 字体:Arial, 11px, 默认颜色
# - 对齐:左对齐、垂直居中
# - 边框:底部细线、浅灰色
# 使用示例
sheet.set_cell_value("A2", "产品A")
sheet.set_cell_value("B2", 100)
sheet.set_cell_value("C2", 50)
# 为所有数据行应用样式
for row in range(2, 11):
for col in ["A", "B", "C"]:
cell = sheet.get_cell(f"{col}{row}")
sheet.apply_style(cell, PredefinedStyles.data_style())
number_style() - 数字样式¶
# 获取数字样式
number = PredefinedStyles.number_style()
# 特点:
# - 字体:Arial, 11px
# - 对齐:右对齐、垂直居中
# - 格式:千分位分隔符,保留两位小数
# - 边框:底部细线、浅灰色
# 使用示例
sheet.set_cell_value("B2", 1234567.89)
sheet.apply_style(sheet.get_cell("B2"), PredefinedStyles.number_style())
# 显示为: 1,234,567.89
currency_style() - 货币样式¶
# 获取货币样式
currency = PredefinedStyles.currency_style()
# 特点:
# - 字体:Arial, 11px
# - 对齐:右对齐、垂直居中
# - 格式:会计货币格式,带括号表示负数
# - 边框:底部细线、浅灰色
# 使用示例
sheet.set_cell_value("C2", -1234.56)
sheet.apply_style(sheet.get_cell("C2"), PredefinedStyles.currency_style())
# 显示为: ($1,234.56)
date_style() - 日期样式¶
# 获取日期样式
date = PredefinedStyles.date_style()
# 特点:
# - 字体:Arial, 11px
# - 对齐:水平居中、垂直居中
# - 格式:MM/DD/YYYY
# - 边框:底部细线、浅灰色
# 使用示例
sheet.set_cell_value("D2", "2024-11-02")
sheet.apply_style(sheet.get_cell("D2"), PredefinedStyles.date_style())
# 显示为: 11/02/2024
percentage_style() - 百分比样式¶
# 获取百分比样式
percentage = PredefinedStyles.percentage_style()
# 特点:
# - 字体:Arial, 11px
# - 对齐:右对齐、垂直居中
# - 格式:保留两位小数百分比
# - 边框:底部细线、浅灰色
# 使用示例
sheet.set_cell_value("E2", 0.1234)
sheet.apply_style(sheet.get_cell("E2"), PredefinedStyles.percentage_style())
# 显示为: 12.34%
error_style() - 错误样式¶
# 获取错误样式
error = PredefinedStyles.error_style()
# 特点:
# - 字体:Arial, 11px, 白色
# - 背景:红色
# - 用于:错误信息、验证失败
# 使用示例
sheet.set_cell_value("F2", "验证失败")
sheet.apply_style(sheet.get_cell("F2"), PredefinedStyles.error_style())
warning_style() - 警告样式¶
# 获取警告样式
warning = PredefinedStyles.warning_style()
# 特点:
# - 字体:Arial, 11px, 黑色
# - 背景:黄色
# - 用于:警告信息、注意
# 使用示例
sheet.set_cell_value("G2", "注意:库存不足")
sheet.apply_style(sheet.get_cell("G2"), PredefinedStyles.warning_style())
success_style() - 成功样式¶
# 获取成功样式
success = PredefinedStyles.success_style()
# 特点:
# - 字体:Arial, 11px, 白色
# - 背景:绿色
# - 用于:成功信息、完成状态
# 使用示例
sheet.set_cell_value("H2", "已完成")
sheet.apply_style(sheet.get_cell("H2"), PredefinedStyles.success_style())
info_style() - 信息样式¶
# 获取信息样式
info = PredefinedStyles.info_style()
# 特点:
# - 字体:Arial, 11px, 黑色
# - 背景:浅蓝色
# - 用于:一般信息、提示
# 使用示例
sheet.set_cell_value("I2", "提示:数据已更新")
sheet.apply_style(sheet.get_cell("I2"), PredefinedStyles.info_style())
完整示例¶
示例1: 销售报告¶
from symphra_excel import Workbook
from symphra_excel.styles import PredefinedStyles
wb = Workbook()
sheet = wb.create_worksheet("销售报告")
# 设置标题
sheet.merge_cells("A1:E1")
sheet.set_cell_value("A1", "2024年第一季度销售报告")
sheet.apply_style(sheet.get_cell("A1"), PredefinedStyles.title_style())
# 设置副标题
sheet.merge_cells("A2:E2")
sheet.set_cell_value("A2", "2024年1月-3月")
sheet.apply_style(sheet.get_cell("A2"), PredefinedStyles.subtitle_style())
# 设置表头
headers = ["产品名称", "1月销量", "2月销量", "3月销量", "季度总计"]
for col, header in enumerate(headers, start=1):
cell = f"{chr(64+col)}4"
sheet.set_cell_value(cell, header)
sheet.apply_style(sheet.get_cell(cell), PredefinedStyles.header_style())
# 设置数据
data = [
["产品A", 100, 120, 110, 330],
["产品B", 80, 90, 95, 265],
["产品C", 150, 160, 155, 465],
]
for row_idx, row_data in enumerate(data, start=5):
for col_idx, value in enumerate(row_data, start=1):
cell = f"{chr(64+col_idx)}{row_idx}"
sheet.set_cell_value(cell, value)
# 根据列应用不同样式
if col_idx == 1:
sheet.apply_style(sheet.get_cell(cell), PredefinedStyles.data_style())
else:
sheet.apply_style(sheet.get_cell(cell), PredefinedStyles.number_style())
wb.save("销售报告.xlsx")
示例2: 财务仪表板¶
from symphra_excel import Workbook
from symphra_excel.styles import PredefinedStyles
wb = Workbook()
sheet = wb.create_worksheet("财务指标")
# 标题
sheet.merge_cells("A1:C1")
sheet.set_cell_value("A1", "财务指标仪表板")
sheet.apply_style(sheet.get_cell("A1"), PredefinedStyles.title_style())
# 指标数据
indicators = [
("总收入", 1500000, "currency"),
("净利润", 300000, "currency"),
("利润率", 0.20, "percentage"),
("客户数量", 1250, "number"),
("订单日期", "2024-11-02", "date"),
]
row = 3
for label, value, style_type in indicators:
# 标签
sheet.set_cell_value(f"A{row}", label)
sheet.apply_style(sheet.get_cell(f"A{row}"), PredefinedStyles.data_style())
# 值
sheet.set_cell_value(f"B{row}", value)
# 应用对应样式
if style_type == "currency":
sheet.apply_style(sheet.get_cell(f"B{row}"), PredefinedStyles.currency_style())
elif style_type == "percentage":
sheet.apply_style(sheet.get_cell(f"B{row}"), PredefinedStyles.percentage_style())
elif style_type == "number":
sheet.apply_style(sheet.get_cell(f"B{row}"), PredefinedStyles.number_style())
elif style_type == "date":
sheet.apply_style(sheet.get_cell(f"B{row}"), PredefinedStyles.date_style())
row += 1
wb.save("财务指标.xlsx")
示例3: 数据验证报告¶
from symphra_excel import Workbook
from symphra_excel.styles import PredefinedStyles
wb = Workbook()
sheet = wb.create_worksheet("验证报告")
# 标题
sheet.merge_cells("A1:D1")
sheet.set_cell_value("A1", "数据验证报告")
sheet.apply_style(sheet.get_cell("A1"), PredefinedStyles.title_style())
# 表头
headers = ["字段", "状态", "消息", "值"]
for col, header in enumerate(headers, start=1):
cell = f"{chr(64+col)}3"
sheet.set_cell_value(cell, header)
sheet.apply_style(sheet.get_cell(cell), PredefinedStyles.header_style())
# 验证结果
validations = [
("邮箱", "success", "验证通过", "user@example.com"),
("年龄", "error", "年龄必须是正数", "-5"),
("手机", "warning", "格式可能不正确", "123"),
("姓名", "info", "已验证", "张三"),
]
for row_idx, (field, status, message, value) in enumerate(validations, start=4):
# 字段名
sheet.set_cell_value(f"A{row_idx}", field)
sheet.apply_style(sheet.get_cell(f"A{row_idx}"), PredefinedStyles.data_style())
# 状态
sheet.set_cell_value(f"B{row_idx}", status)
# 根据状态应用样式
if status == "success":
sheet.apply_style(sheet.get_cell(f"B{row_idx}"), PredefinedStyles.success_style())
elif status == "error":
sheet.apply_style(sheet.get_cell(f"B{row_idx}"), PredefinedStyles.error_style())
elif status == "warning":
sheet.apply_style(sheet.get_cell(f"B{row_idx}"), PredefinedStyles.warning_style())
elif status == "info":
sheet.apply_style(sheet.get_cell(f"B{row_idx}"), PredefinedStyles.info_style())
# 消息
sheet.set_cell_value(f"C{row_idx}", message)
sheet.apply_style(sheet.get_cell(f"C{row_idx}"), PredefinedStyles.data_style())
# 值
sheet.set_cell_value(f"D{row_idx}", value)
sheet.apply_style(sheet.get_cell(f"D{row_idx}"), PredefinedStyles.data_style())
wb.save("验证报告.xlsx")
自定义预定义样式¶
修改预定义样式¶
from symphra_excel.styles import PredefinedStyles
from symphra_excel.styles.cell_style import CellStyle
# 获取预定义样式
header = PredefinedStyles.header_style()
# 修改样式属性
header.set_font(name="微软雅黑", size=14)
header.set_fill(pattern="solid", fg_color="#4472C4")
# 应用修改后的样式
# sheet.apply_style(cell, header)
创建自定义预定义样式¶
from symphra_excel.styles import PredefinedStyles
from symphra_excel.styles.cell_style import CellStyle
class CustomPredefinedStyles:
"""自定义预定义样式集合"""
@staticmethod
def highlight_style():
"""高亮样式"""
return (
CellStyle()
.set_font(name="Arial", size=11, bold=True, color="#FFFFFF")
.set_fill(pattern="solid", fg_color="#FF6B6B")
)
@staticmethod
def readonly_style():
"""只读样式"""
return (
CellStyle()
.set_font(name="Arial", size=11, italic=True, color="#999999")
.set_border(top="thin", top_color="#CCCCCC")
)
# 使用自定义样式
highlight = CustomPredefinedStyles.highlight_style()
readonly = CustomPredefinedStyles.readonly_style()
样式组合使用¶
批量应用样式¶
from symphra_excel.styles import PredefinedStyles
# 获取所有需要的样式
header = PredefinedStyles.header_style()
data = PredefinedStyles.data_style()
currency = PredefinedStyles.currency_style()
# 批量应用到范围
for row in range(2, 101):
# A列应用data_style
sheet.apply_style(sheet.get_cell(f"A{row}"), data)
# B列应用currency_style
sheet.apply_style(sheet.get_cell(f"B{row}"), currency)
# 整个范围应用样式
sheet.apply_style_range("A1:E1", header)
sheet.apply_style_range("A2:E100", data)
最佳实践¶
✅ 推荐做法¶
# 1. 使用预定义样式快速应用
from symphra_excel.styles import PredefinedStyles
# 获取并应用
header_style = PredefinedStyles.header_style()
sheet.apply_style(cell, header_style)
# 2. 根据数据类型选择样式
if is_currency_value(value):
style = PredefinedStyles.currency_style()
elif is_percentage_value(value):
style = PredefinedStyles.percentage_style()
else:
style = PredefinedStyles.data_style()
sheet.apply_style(cell, style)
# 3. 先创建样式,再批量应用
header = PredefinedStyles.header_style()
for col in range(1, 11):
cell = sheet.get_cell(f"{chr(64+col)}1")
sheet.apply_style(cell, header)
❌ 避免的做法¶
# 1. 每次应用都重新创建样式
for row in range(2, 100):
# 错误:重复创建
sheet.apply_style(sheet.get_cell(f"A{row}"), PredefinedStyles.header_style())
# 2. 混合使用不同的样式系统
# 错误:混用预定义样式和自定义样式导致不一致
# 3. 不根据数据类型选择样式
# 错误:所有数据都用同一个样式