跳转至

核心概念

本页面介绍Symphra Excel的核心概念和架构,帮助您更好地理解和使用这个库。

架构概览

Symphra Excel采用模块化设计,主要由以下几个模块组成:

symphra_excel/
├── core/           # 核心模块:Workbook和Worksheet
├── styles/         # 样式系统
├── templates/      # 模板引擎
├── images/         # 图片处理
├── async_support/  # 异步支持
├── memory_ops/     # 内存优化
└── utils/          # 工具函数

核心对象

Workbook(工作簿)

Workbook是Excel文件的顶层容器,代表一个完整的Excel文件。

from symphra_excel import Workbook

# 创建新工作簿
wb = Workbook()

# 加载现有文件
wb = Workbook("existing.xlsx")

# 保存
wb.save("output.xlsx")

主要功能: - 管理多个工作表 - 文件的加载和保存 - 全局设置和属性

Worksheet(工作表)

Worksheet代表工作簿中的一个工作表,是数据的实际容器。

# 创建工作表
sheet = wb.create_worksheet("我的数据")

# 获取工作表
sheet = wb.get_worksheet("我的数据")

# 操作单元格
sheet.set_cell_value("A1", "Hello")

主要功能: - 单元格读写 - 行列操作 - 样式应用 - 合并单元格

Cell(单元格)

单元格是数据的最小单位,通过单元格引用(如"A1")访问。

# 设置单元格值
sheet.set_cell_value("A1", "文本")
sheet.set_cell_value("B1", 123)
sheet.set_cell_value("C1", 3.14)

# 获取单元格值
value = sheet.get_cell_value("A1")

支持的数据类型: - 字符串 - 整数 - 浮点数 - 布尔值 - 日期时间 - 公式

样式系统

CellStyle(单元格样式)

CellStyle对象封装了单元格的所有样式属性。

from symphra_excel.styles import CellStyle, Color

style = CellStyle()
style.set_font(name="微软雅黑", size=12, bold=True, color=Color.BLUE)
style.set_background_color(Color.LIGHT_YELLOW)
style.set_alignment(horizontal="center", vertical="center")

sheet.apply_style("A1", style)

样式组件: - 字体(Font): 字体名称、大小、颜色、粗体、斜体等 - 填充(Fill): 背景颜色、填充模式 - 边框(Border): 边框样式、颜色、位置 - 对齐(Alignment): 水平对齐、垂直对齐、文本换行 - 数字格式(NumberFormat): 数字、日期、货币等格式

预定义样式

Symphra Excel提供了一系列预定义样式:

from symphra_excel.styles import PredefinedStyles

# 使用预定义样式
sheet.apply_style("A1", PredefinedStyles.header_style())
sheet.apply_style("A2", PredefinedStyles.title_style())
sheet.apply_style("A3", PredefinedStyles.warning_style())
sheet.apply_style("A4", PredefinedStyles.success_style())

模板引擎

TemplateWorkbook

基于Jinja2语法的模板渲染系统。

from symphra_excel import TemplateWorkbook

# 加载模板
wb = TemplateWorkbook("template.xlsx")

# 准备数据
data = {
    "title": "销售报表",
    "items": [
        {"name": "产品A", "quantity": 100},
        {"name": "产品B", "quantity": 200},
    ]
}

# 渲染
wb.render(data)
wb.save("output.xlsx")

模板语法: - {{ variable }} - 变量插值 - {% for item in items %} - 循环 - {% if condition %} - 条件判断 - {{ image:path }} - 图片占位符

异步支持

AsyncWorkbook

提供异步API,适合处理大量文件或IO密集型任务。

import asyncio
from symphra_excel.async_support import AsyncWorkbook

async def create_report():
    async with AsyncWorkbook() as wb:
        sheet = await wb.create_worksheet("数据")
        await sheet.set_cell_value("A1", "Hello")
        await wb.save("output.xlsx")

asyncio.run(create_report())

适用场景: - 批量生成多个Excel文件 - 从网络获取数据并生成报表 - 大规模数据处理 - 与异步框架集成(如FastAPI)

内存优化

MemoryOptimizedWorkbook

专为大数据集设计的内存优化版本。

from symphra_excel.memory_ops import MemoryOptimizedWorkbook

wb = MemoryOptimizedWorkbook()
sheet = wb.create_worksheet("大数据")

# 处理大量数据不会导致内存溢出
for i in range(1000000):
    sheet.set_cell_value(f"A{i+1}", f"Data {i}")

wb.save("large_file.xlsx")

优化策略: - 流式写入 - 分块处理 - 自动内存释放 - 缓冲区管理

图片处理

ExcelImage

支持在Excel中插入和嵌入图片。

from symphra_excel.images import ExcelImage

# 创建图片对象
img = ExcelImage("logo.png")

# 插入到工作表
sheet.add_image(img, "A1")

# 设置图片大小
img.width = 200
img.height = 100

# 嵌入到单元格
sheet.embed_image("B2", "photo.jpg")

支持格式: - PNG - JPEG - GIF - BMP

工作流程

典型的Symphra Excel工作流程:

1. 创建/加载工作簿
2. 创建/获取工作表
3. 写入数据
4. 应用样式
5. 添加图片(可选)
6. 保存文件
7. 关闭资源

示例代码

from symphra_excel import Workbook
from symphra_excel.styles import PredefinedStyles

# 1. 创建工作簿
wb = Workbook()

# 2. 创建工作表
sheet = wb.create_worksheet("销售数据")

# 3. 写入数据
sheet.set_cell_value("A1", "产品")
sheet.set_cell_value("B1", "销量")

# 4. 应用样式
sheet.apply_style("A1", PredefinedStyles.header_style())
sheet.apply_style("B1", PredefinedStyles.header_style())

# 5. 保存
wb.save("sales.xlsx")

# 6. 关闭(使用with语句自动处理)
wb.close()

最佳实践

使用上下文管理器

# ✅ 推荐
with Workbook() as wb:
    sheet = wb.create_worksheet("数据")
    sheet.set_cell_value("A1", "Hello")
    wb.save("output.xlsx")
# 自动关闭

# ❌ 不推荐
wb = Workbook()
sheet = wb.create_worksheet("数据")
sheet.set_cell_value("A1", "Hello")
wb.save("output.xlsx")
wb.close()  # 容易忘记

样式复用

# ✅ 推荐:创建一次,多次使用
header_style = PredefinedStyles.header_style()
for cell in ["A1", "B1", "C1"]:
    sheet.apply_style(cell, header_style)

# ❌ 不推荐:重复创建
sheet.apply_style("A1", PredefinedStyles.header_style())
sheet.apply_style("B1", PredefinedStyles.header_style())
sheet.apply_style("C1", PredefinedStyles.header_style())

批量操作

# ✅ 推荐:批量处理
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row_idx, row in enumerate(data, start=1):
    for col_idx, value in enumerate(row):
        sheet.set_cell_value(f"{chr(65+col_idx)}{row_idx}", value)

# ❌ 不推荐:逐个处理
sheet.set_cell_value("A1", 1)
sheet.set_cell_value("B1", 2)
# ... 太多重复代码

下一步

现在您已经理解了Symphra Excel的核心概念,可以: