openpyxl 核心是 Workbook、Worksheet、Cell 三层结构,纯 Python 操作 Excel 文件;新建用 Workbook(),加载用 load_workbook() 并注意 read_only=False;支持坐标或行列索引读写单元格,需显式 save() 保存,避开已打开文件和中文路径乱码问题。

用 openpyxl 读写 Excel 文件,核心在于理解工作簿(Workbook)、工作表(Worksheet)、单元格(Cell)三层结构,不依赖 Excel 软件,纯 Python 操作,适合自动化报表、数据清洗和批量处理。
创建与加载工作簿
新建空工作簿直接调用 Workbook();加载已有文件用 load_workbook()。注意:后者默认只读模式(read_only=True)会限制单元格赋值,如需修改务必设为 False(默认值)。
- 新建:`wb = Workbook()`,默认带一个名为
Sheet的活动表 - 加载:`wb = load_workbook("data.xlsx")`,支持 .xlsx / .xlsm / .xltx / .xltm
- 避免覆盖原文件:保存时用新路径,如 `wb.save("output.xlsx")`
操作工作表与单元格
通过 wb.active 获取当前激活表,或用 wb["Sheet1"] 按名访问;单元格可通过坐标(如 "A1")或行列索引(如 cell(row=2, column=3))定位,行/列编号从 1 开始。
- 写入值:`ws["B2"] = "姓名"` 或 `ws.cell(3, 1, value="张三")`
- 读取值:`val = ws["C5"].value`,返回原始数据类型(数字、字符串、日期等)
- 批量写入:用嵌套 for 循环配合
cell(),或直接赋值二维列表到ws.append()
样式与格式控制(基础实用项)
openpyxl 支持字体、对齐、边框、填充色等设置,但不支持所有 Excel 原生样式(如条件格式需额外调用 ConditionalFormatting)。
立即学习“Python免费学习笔记(深入)”;
- 加粗字体:`from openpyxl.styles import Font; ws["A1"].font = Font(bold=True)`
- 居中对齐:`from openpyxl.styles import Alignment; ws["A1"].alignment = Alignment(horizontal="center")`
- 设置列宽/行高:`ws.column_dimensions["B"].width = 15`,`ws.row_dimensions[3].height = 25`
保存与常见避坑点
每次修改后必须显式调用 save() 才会写入磁盘;若文件已打开,保存会失败并报错 PermissionError;含公式的工作表,openpyxl 默认读取计算结果而非公式文本(需设 data_only=True 加载)。
- 关闭已打开的 Excel 程序再运行脚本
- 读公式结果:`wb = load_workbook("formulas.xlsx", data_only=True)`
- 避免中文路径乱码:确保 Python 脚本编码为 UTF-8,路径字符串无需额外解码










