性能优化¶
本页面介绍性能优化技巧。
批量操作¶
批量设置单元格¶
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)