openpyxl写入excel需理解workbook、worksheet、cell三层结构,支持新建/修改文件、多种写入方式、样式设置及大数据优化。

用 openpyxl 写入 Excel 文件,核心在于理解工作簿(Workbook)、工作表(Worksheet)和单元格(Cell)三层结构,并按需操作——不是所有写入都要从头创建,也不是所有场景都适合直接赋值。
创建工作簿并写入基础数据
适合新建报表、导出结果等场景。openpyxl 默认生成一个名为“Sheet”的工作表,可直接使用,也可新建或重命名:
- 调用 Workbook() 创建空白工作簿
- 用 wb.active 获取默认表,或用 wb.create_sheet("名称") 新建表
- 写入方式有三种:单个单元格(ws["A1"] = "标题")、按行列索引(ws.cell(row=2, column=3, value="数据"))、批量写入二维列表(for row in data: ws.append(row))
修改已有 Excel 文件(保留格式与公式)
openpyxl 能读写已存在的 .xlsx 文件,但注意:它不支持 .xls;加载时若不加 keep_vba=False(默认),含宏的文件会报错;公式会被保留,但计算结果可能滞后(需用 Excel 手动刷新或设置 wb.data_only = False 加载原始公式):
- 用 load_workbook("file.xlsx") 打开文件
- 修改前建议先检查表名:wb.sheetnames,再用 wb["Sheet1"] 获取目标表
- 写入后务必调用 wb.save("file.xlsx"),否则无任何变化
写入样式与结构化内容
单纯写数值不够,常需加粗标题、居中对齐、设置边框或列宽。openpyxl 的样式是“对象式”应用,需单独配置再赋给单元格或区域:
立即学习“Python免费学习笔记(深入)”;
- 字体、对齐、边框、填充色都通过 from openpyxl.styles import Font, Alignment, Border, Side, PatternFill 导入
- 例如设标题行: ws["A1"].font = Font(bold=True); ws["A1"].alignment = Alignment(horizontal="center")
- 列宽可统一设:ws.column_dimensions["A"].width = 15;行高类似:ws.row_dimensions[1].height = 25
处理大数据量时的性能提醒
openpyxl 是内存型库,全部数据加载进 Python 对象。写入上万行时易卡顿或爆内存:
- 避免逐单元格循环赋值(如 for i in range(10000): ws[f"A{i}"] = i),改用 ws.append() 批量追加列表
- 无需读取原文件内容时,不要用 load_workbook 打开再保存,而应新建 Workbook 直接写入
- 极端情况(如导出百万级数据),考虑 xlsxwriter(只写不读)或分块写入 + 合并










