跳转至

性能优化

本页面介绍性能优化技巧。

批量操作

批量设置单元格

from symphra_excel import Workbook

with Workbook() as wb:
    sheet = wb.create_worksheet("批量")

    data = []
    for i in range(1000):
        data.append([i, f"Item {i}", i * 100])

    sheet.set_values_batch("A1", data)

    wb.save("batch_optimized.xlsx")

样式复用

复用样式对象

from symphra_excel import Workbook
from symphra_excel.styles import CellStyle

with Workbook() as wb:
    sheet = wb.create_worksheet("样式复用")

    header_style = CellStyle()
    header_style.set_font(bold=True)
    header_style.set_background_color("#E0E0E0")

    for col in ["A", "B", "C"]:
        sheet.set_cell_value(f"{col}1", f"Header {col}")
        sheet.apply_style(f"{col}1", header_style)

    wb.save("style_reuse.xlsx")

内存优化

使用内存优化模式

from symphra_excel.utils import MemoryOptimizedWorkbook

with MemoryOptimizedWorkbook() as wb:
    sheet = wb.create_worksheet("优化")

    for row in range(1, 100001):
        sheet.set_cell_value(f"A{row}", row)

    wb.save("memory_optimized.xlsx")

完整示例

示例: 优化的报表生成

from symphra_excel.utils import MemoryOptimizedWorkbook
from symphra_excel.styles import PredefinedStyles

with MemoryOptimizedWorkbook() as wb:
    sheet = wb.create_worksheet("优化报表")

    header_style = PredefinedStyles.header_style()
    data_style = PredefinedStyles.data_style()
    number_style = PredefinedStyles.number_style()

    headers = ["ID", "名称", "数值"]
    for col_idx, header in enumerate(headers, start=1):
        cell = f"{chr(64+col_idx)}1"
        sheet.set_cell_value(cell, header)
        sheet.apply_style(cell, header_style)

    chunk_size = 10000
    for chunk_start in range(2, 100002, chunk_size):
        chunk_end = min(chunk_start + chunk_size, 100002)

        for row in range(chunk_start, chunk_end):
            sheet.set_cell_value(f"A{row}", row - 1)
            sheet.apply_style(f"A{row}", data_style)

            sheet.set_cell_value(f"B{row}", f"Item {row - 1}")
            sheet.apply_style(f"B{row}", data_style)

            sheet.set_cell_value(f"C{row}", (row - 1) * 100)
            sheet.apply_style(f"C{row}", number_style)

    wb.save("optimized_report.xlsx")

最佳实践

✅ 推荐做法

header_style = PredefinedStyles.header_style()
for col in ["A", "B", "C"]:
    sheet.apply_style(f"{col}1", header_style)

from symphra_excel.utils import MemoryOptimizedWorkbook
with MemoryOptimizedWorkbook() as wb:
    pass

chunk_size = 10000
for i in range(0, total, chunk_size):
    process_chunk(i, chunk_size)

❌ 避免的做法

for col in ["A", "B", "C"]:
    style = CellStyle()
    style.set_font(bold=True)
    sheet.apply_style(f"{col}1", style)

for row in range(1000000):
    sheet.set_cell_value(f"A{row}", row)

下一步