跳转至

预定义样式

本页面介绍如何使用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. 不根据数据类型选择样式
# 错误:所有数据都用同一个样式

下一步