跳转至

类型定义参考

本页面提供Symphra Excel库中所有类型定义和TypedDict的详细参考。

概述

type_definitions.py模块提供了完整的类型别名和TypedDict定义,用于改进类型提示和IDE支持。这些类型定义使代码更加清晰,并提供更好的开发体验。

类型别名 (Type Aliases)

单元格和范围引用

CellRef: TypeAlias = str
"""单元格引用类型 (例如: 'A1', 'B5')"""

RangeRef: TypeAlias = str
"""范围引用类型 (例如: 'A1:B10', 'C1:D20')"""

ColumnRef: TypeAlias = str
"""列引用类型 (例如: 'A', 'AB', 'BC')"""

示例用法:

from symphra_excel.utils.type_definitions import CellRef, RangeRef

def set_cell_value(cell: CellRef, value: str) -> None:
    """设置单元格值"""
    pass

def get_range_values(range_ref: RangeRef) -> list[list[str]]:
    """获取范围值"""
    pass

文件路径

FilePath: TypeAlias = str | Path
"""文件路径类型 (字符串或Path对象)"""

示例用法:

from symphra_excel.utils.type_definitions import FilePath

def load_workbook(file_path: FilePath) -> Workbook:
    """加载工作簿"""
    pass

颜色值

ColorValue: TypeAlias = str
"""颜色值类型 (十六进制字符串,例如: '#FF0000')"""

示例用法:

from symphra_excel.utils.type_definitions import ColorValue

def set_fill_color(color: ColorValue) -> None:
    """设置填充颜色"""
    pass

# 使用
set_fill_color("#FF0000")  # 红色
set_fill_color("FF0000")   # 红色(不带#)

图像源

ImageSource: TypeAlias = str | Path | bytes | io.BytesIO
"""图像源类型 (文件路径、字节数据或BytesIO对象)"""

示例用法:

from symphra_excel.utils.type_definitions import ImageSource

def insert_image(image_source: ImageSource) -> None:
    """插入图片"""
    pass

# 使用
insert_image("logo.png")                    # 文件路径
insert_image(Path("logo.png"))             # Path对象
insert_image(b"\x89PNG\r\n\x1a\n...")     # 字节数据
insert_image(io.BytesIO(image_bytes))      # BytesIO对象

单元格值

CellValue: TypeAlias = str | int | float | bool | None
"""单元格可以包含的值类型"""

示例用法:

from symphra_excel.utils.type_definitions import CellValue

def set_value(value: CellValue) -> None:
    """设置单元格值"""
    pass

# 使用
set_value("文本")        # 字符串
set_value(123)           # 整数
set_value(45.67)         # 浮点数
set_value(True)          # 布尔值
set_value(None)          # None值

行数据

RowData: TypeAlias = list[CellValue]
"""行数据类型 (单元格值列表)"""

示例用法:

from symphra_excel.utils.type_definitions import RowData

def set_row_data(row_data: RowData) -> None:
    """设置行数据"""
    pass

# 使用
set_row_data(["产品A", 100, 50.5, True])

工作簿模式

WorkbookMode: TypeAlias = str
"""工作簿模式类型 ('default', 'read_only', 'write_only')"""

示例用法:

from symphra_excel.utils.type_definitions import WorkbookMode

def create_workbook(mode: WorkbookMode = "default") -> Workbook:
    """创建工作簿"""
    pass

TypedDict 定义

ImageOptions - 图片选项

class ImageOptions(TypedDict, total=False):
    """图片选项类型定义"""

    width: int
    """图片宽度(像素)"""

    height: int
    """图片高度(像素)"""

    maintain_aspect_ratio: bool
    """是否保持宽高比"""

    margin: int
    """边距(像素)"""

    anchor_to_cell: bool
    """是否锚定到单元格"""

    move_with_cells: bool
    """是否随单元格移动"""

    resize_with_cells: bool
    """是否随单元格调整大小"""

    position: str
    """位置 ('center', 'top-left', 'top-right', 'bottom-left', 'bottom-right')"""

示例用法:

from symphra_excel.utils.type_definitions import ImageOptions

options: ImageOptions = {
    "width": 100,
    "height": 100,
    "margin": 8,
    "maintain_aspect_ratio": True,
}

TemplateContext - 模板上下文

class TemplateContext(TypedDict, total=False):
    """模板上下文类型定义"""

    title: str
    """标题"""

    date: str
    """日期"""

    author: str
    """作者"""

    data: list[dict[str, Any]]
    """数据列表"""

    variables: dict[str, Any]
    """变量字典"""

示例用法:

from symphra_excel.utils.type_definitions import TemplateContext

context: TemplateContext = {
    "title": "月度报告",
    "date": "2024-11-02",
    "author": "张三",
    "data": [
        {"name": "产品A", "value": 100},
        {"name": "产品B", "value": 200},
    ],
}

WorkbookProperties - 工作簿属性

class WorkbookProperties(TypedDict, total=False):
    """工作簿属性类型定义"""

    title: str
    """标题"""

    creator: str
    """创建者"""

    description: str
    """描述"""

    subject: str
    """主题"""

    created: str
    """创建日期"""

    modified: str
    """修改日期"""

    last_modified_by: str
    """最后修改者"""

    category: str
    """分类"""

    keywords: str
    """关键词"""

示例用法:

from symphra_excel.utils.type_definitions import WorkbookProperties

props: WorkbookProperties = {
    "title": "销售报告",
    "creator": "系统",
    "description": "2024年第一季度销售数据",
    "category": "报表",
    "keywords": "销售,报表,2024",
}

StyleOptions - 样式选项

class StyleOptions(TypedDict, total=False):
    """样式选项类型定义"""

    font_name: str
    """字体名称"""

    font_size: int
    """字体大小"""

    font_color: str
    """字体颜色"""

    bold: bool
    """是否粗体"""

    italic: bool
    """是否斜体"""

    underline: bool
    """是否下划线"""

    fill_color: str
    """填充颜色"""

    border_style: str
    """边框样式"""

    border_color: str
    """边框颜色"""

    alignment: str
    """对齐方式"""

    number_format: str
    """数字格式"""

示例用法:

from symphra_excel.utils.type_definitions import StyleOptions

style: StyleOptions = {
    "font_name": "Arial",
    "font_size": 12,
    "bold": True,
    "fill_color": "#FF0000",
    "alignment": "center",
}

BatchImageData - 批量图片数据

class BatchImageData(TypedDict, total=False):
    """批量图片数据类型定义"""

    image: ImageSource
    """图片源"""

    cell: CellRef
    """目标单元格"""

    width: int
    """宽度(像素)"""

    height: int
    """高度(像素)"""

    options: ImageOptions
    """图片选项"""

示例用法:

from symphra_excel.utils.type_definitions import BatchImageData

batch_data: BatchImageData = {
    "image": "logo.png",
    "cell": "A1",
    "width": 100,
    "height": 50,
    "options": {"margin": 8},
}

MemoryConfig - 内存配置

class MemoryConfig(TypedDict, total=False):
    """内存配置类型定义"""

    max_memory_usage_mb: int
    """最大内存使用量(MB)"""

    batch_size: int
    """批处理大小"""

    streaming_chunk_size: int
    """流式处理块大小"""

    enable_compression: bool
    """是否启用压缩"""

    enable_caching: bool
    """是否启用缓存"""

    cache_size_mb: int
    """缓存大小(MB)"""

    gc_threshold: int
    """垃圾回收阈值"""

    lazy_loading: bool
    """是否启用延迟加载"""

示例用法:

from symphra_excel.utils.type_definitions import MemoryConfig

config: MemoryConfig = {
    "max_memory_usage_mb": 512,
    "batch_size": 1000,
    "enable_compression": True,
    "enable_caching": True,
    "cache_size_mb": 64,
}

ProcessingStats - 处理统计信息

class ProcessingStats(TypedDict, total=False):
    """处理统计信息类型定义"""

    rows_processed: int
    """已处理行数"""

    rows_skipped: int
    """跳过行数"""

    memory_usage_mb: float
    """内存使用量(MB)"""

    processing_time: float
    """处理时间(秒)"""

    errors: list[str]
    """错误列表"""

示例用法:

from symphra_excel.utils.type_definitions import ProcessingStats

stats: ProcessingStats = {
    "rows_processed": 10000,
    "rows_skipped": 5,
    "memory_usage_mb": 128.5,
    "processing_time": 3.42,
    "errors": ["警告:第100行格式异常"],
}

回调类型

DataProcessor - 数据处理回调

DataProcessor: TypeAlias = Any  # Callable[[list[list[Any]]], list[Any]]
"""数据处理器回调类型"""

ProgressCallback - 进度回调

ProgressCallback: TypeAlias = Any  # Callable[[int, int], None]
"""进度回调类型 (当前进度, 总数)"""

ErrorHandler - 错误处理回调

ErrorHandler: TypeAlias = Any  # Callable[[Exception], None]
"""错误处理器回调类型"""

示例用法:

from symphra_excel.utils.type_definitions import ProgressCallback, ErrorHandler

def progress_callback(current: int, total: int) -> None:
    """进度回调函数"""
    percent = (current / total) * 100
    print(f"进度: {percent:.1f}% ({current}/{total})")

def error_handler(error: Exception) -> None:
    """错误处理函数"""
    print(f"发生错误: {error}")

# 使用
process_data(progress_callback=progress_callback, error_handler=error_handler)

使用类型定义

在函数参数中使用

from symphra_excel.utils.type_definitions import (
    CellRef, ImageSource, ImageOptions, TemplateContext
)

def insert_image(
    image: ImageSource,
    cell: CellRef,
    options: ImageOptions | None = None
) -> None:
    """插入图片"""
    pass

def render_template(context: TemplateContext) -> None:
    """渲染模板"""
    pass

在类属性中使用

from symphra_excel.utils.type_definitions import ImageOptions

class ImageProcessor:
    """图片处理器"""

    def __init__(self) -> None:
        self.default_options: ImageOptions = {
            "margin": 8,
            "maintain_aspect_ratio": True,
        }

在返回值中使用

from symphra_excel.utils.type_definitions import ProcessingStats

def process_large_file() -> ProcessingStats:
    """处理大文件"""
    stats: ProcessingStats = {
        "rows_processed": 100000,
        "memory_usage_mb": 256.0,
        "processing_time": 5.2,
        "errors": [],
    }
    return stats

类型验证

使用TypedDict确保类型安全

from typing import get_type_hints
from symphra_excel.utils.type_definitions import ImageOptions

def validate_options(options: dict) -> ImageOptions:
    """验证图片选项"""
    # TypedDict允许额外的键,但提示时只显示定义的键
    return options  # 类型安全

# 使用
options: ImageOptions = {
    "width": 100,
    "height": 100,
    "custom_option": "额外选项",  # 允许,但不在类型提示中
}

最佳实践

✅ 推荐做法

# 1. 使用类型别名提高代码可读性
from symphra_excel.utils.type_definitions import CellRef, CellValue

def set_cell_value(cell: CellRef, value: CellValue) -> None:
    """设置单元格值"""
    pass

# 2. 使用TypedDict确保配置的结构化
from symphra_excel.utils.type_definitions import ImageOptions

def process_image(options: ImageOptions) -> None:
    """处理图片"""
    width = options.get("width", 100)
    height = options.get("height", 100)
    # ...

❌ 避免的做法

# 1. 不使用类型定义(降低可读性)
def set_value(cell: str, value: str | int | float | bool | None) -> None:
    pass

# 应该:
# def set_value(cell: CellRef, value: CellValue) -> None:

# 2. 混用类型系统
# 不要在同一个项目混用TypedDict和dict

IDE 支持

自动补全

使用这些类型定义可以获得更好的IDE自动补全:

from symphra_excel.utils.type_definitions import ImageOptions

options: ImageOptions = {
    # IDE会提示:width, height, margin, etc.
}

类型检查

结合mypy进行静态类型检查:

# 安装mypy
pip install mypy

# 运行类型检查
mypy your_script.py

下一步