当前位置: 首页 > news >正文

Python3 模块精讲|openpyxl 万字实战:全自动读写 Excel,办公效率直接起飞

文章标签:#Python #openpyxl #Excel #办公自动化 #数据处理

📝 本章学习目标:本章聚焦 Python 办公自动化核心技能,帮助读者从零到一完全掌握openpyxl模块的创建、读取、修改、样式、图表、批量处理等全套能力。通过本章学习,你将独立完成企业级 Excel 自动化任务,告别手动制表、数据录入、格式调整。


一、引言:为什么 openpyxl 是职场必备神器

在日常办公、数据分析、报表导出、财务统计、数据汇总等场景中,Excel 处理是最高频的刚需。手动复制粘贴、改格式、算数据不仅效率极低,还极易出错。openpyxl 让 Python 直接操控 Excel,把几小时工作压缩到几秒完成。

1.1 背景与意义

💡 核心认知:openpyxl 是目前 Python 生态最主流、最稳定、功能最完整的 Excel 处理库,专门支持.xlsx格式(Excel 2007 及以上)。它可以实现:读写单元格、合并单元格、设置字体颜色、边框底纹、公式计算、批量插入数据、生成图表、读取大量数据等几乎所有 Excel 常用功能。

据行业统计,80% 以上的 Python 数据处理与办公自动化项目依赖 openpyxl,是职场提效、自动化办公的核心利器。

1.2 本章结构概览

为帮助你系统性掌握 openpyxl,本章严格按以下路线学习:

plaintext

📊 环境安装 → 核心概念 → 写入操作 → 读取操作 → 样式设置 → 公式图表 → 批量实战 → 最佳实践 → 常见问题 → 总结展望

二、核心概念解析

2.1 基本定义

概念一:openpyxl 核心能力清单

表格

能力说明典型应用场景
创建工作簿新建空白 xlsx 文件自动日报、周报、报表
写入数据单元格、行、列批量写入数据导出、结果统计
读取数据按行 / 按列 / 按区域读取数据采集、解析上报
样式美化字体、颜色、边框、对齐统一报表格式
公式计算直接写 Excel 公式自动计算财务报表、合计统计
图表生成柱状图、折线图、饼图数据可视化报告
批量处理循环生成、批量修改自动化业务系统
概念二:Excel 文档结构(openpyxl 视角)
  • Workbook(工作簿):整个 Excel 文件
  • Worksheet(工作表):文件内的 Sheet 页
  • Cell(单元格):最小数据单元,如 A1、B2
  • Row/Column:行与列
  • Range:单元格区域,如 A1:C10

2.2 关键术语解释

⚠️ 注意:以下术语是看懂 openpyxl 代码的基础,必须掌握。

  1. wb(Workbook):代表整个 Excel 文件对象
  2. ws(Worksheet):代表当前操作的工作表
  3. cell:单元格,由行号列号定位
  4. offset:单元格偏移,用于相对定位
  5. freeze panes:冻结窗格,方便查看表头

2.3 技术架构概览

💡 架构理解:

plaintext

┌─────────────────────────────────────────┐ │ 工作簿 Workbook │ │ openpyxl.Workbook() │ ├─────────────────────────────────────────┤ │ 工作表 Worksheet │ │ wb.active / wb['Sheet1'] │ ├─────────────────────────────────────────┤ │ 单元格 Cell │ │ ws['A1']、ws.cell() │ ├─────────────────────────────────────────┤ │ 样式与格式 │ │ 字体、边框、颜色、对齐、公式 │ └─────────────────────────────────────────┘

三、环境安装与快速入门

3.1 安装 openpyxl

bash

运行

# 安装稳定版 pip install openpyxl # 验证安装 pip show openpyxl

3.2 第一个程序:创建 Excel 并写入数据

python

运行

# 导入工作簿类 from openpyxl import Workbook # 1. 创建工作簿对象 wb = Workbook() # 2. 获取默认工作表 ws = wb.active # 3. 修改工作表名称 ws.title = "第一个工作表" # 4. 写入单元格数据 ws['A1'] = '姓名' ws['B1'] = '年龄' ws['C1'] = '城市' ws['A2'] = '张三' ws['B2'] = 22 ws['C2'] = '北京' # 5. 保存文件 wb.save('my_first_excel.xlsx') print("✅ Excel创建成功!")

四、写入操作:从零构建 Excel

4.1 单元格写入

python

运行

from openpyxl import Workbook wb = Workbook() ws = wb.active ws.title = "单元格写入" # 方式1:直接赋值 ws['A1'] = '直接赋值写入' # 方式2:使用cell函数(行,列) ws.cell(row=2, column=1, value='cell函数写入') # 方式3:批量写入一行 row_data = ['小明', 25, '上海', '工程师'] ws.append(row_data) wb.save('单元格写入.xlsx')

4.2 批量插入多行数据

python

运行

from openpyxl import Workbook wb = Workbook() ws = wb.active ws.title = "批量数据" # 表头 header = ['ID', '姓名', '成绩', '等级'] ws.append(header) # 模拟数据 data = [ (1, '张三', 92, '优秀'), (2, '李四', 85, '良好'), (3, '王五', 76, '合格'), (4, '赵六', 62, '合格'), ] # 批量追加 for item in data: ws.append(item) wb.save('批量插入.xlsx')

4.3 合并单元格

python

运行

from openpyxl import Workbook wb = Workbook() ws = wb.active # 合并 A1 到 C1 ws.merge_cells('A1:C1') ws['A1'] = '合并单元格标题' # 合并多行多列 ws.merge_cells('A3:C5') ws['A3'] = '大区域合并' wb.save('合并单元格.xlsx')

五、读取操作:提取 Excel 数据

5.1 读取指定单元格

python

运行

from openpyxl import load_workbook # 加载已存在的Excel wb = load_workbook('批量插入.xlsx') ws = wb.active # 读取方式1 print(ws['A2'].value) # 读取方式2 print(ws.cell(row=2, column=2).value)

5.2 按行读取所有数据

python

运行

from openpyxl import load_workbook wb = load_workbook('批量插入.xlsx') ws = wb.active # 遍历所有行 for row in ws.iter_rows(min_row=1, max_row=ws.max_row, values_only=True): print(row)

5.3 获取最大行 / 最大列

python

运行

from openpyxl import load_workbook wb = load_workbook('批量插入.xlsx') ws = wb.active print("最大行数:", ws.max_row) print("最大列数:", ws.max_column)

六、样式设置:企业级报表美化

6.1 字体样式

python

运行

from openpyxl import Workbook from openpyxl.styles import Font wb = Workbook() ws = wb.active # 设置字体:微软雅黑、14号、加粗、蓝色 font = Font( name='微软雅黑', size=14, bold=True, color='FF0000FF' ) ws['A1'] = '报表标题' ws['A1'].font = font wb.save('字体样式.xlsx')

6.2 对齐方式

python

运行

from openpyxl.styles import Alignment from openpyxl import Workbook wb = Workbook() ws = wb.active # 水平居中 + 垂直居中 align = Alignment(horizontal='center', vertical='center') ws['A1'] = '居中对齐' ws['A1'].alignment = align wb.save('对齐样式.xlsx')

6.3 边框设置

python

运行

from openpyxl.styles import Border, Side from openpyxl import Workbook wb = Workbook() ws = wb.active # 边框样式 side = Side(style='thin', color='000000') border = Border(left=side, right=side, top=side, bottom=side) ws['A1'] = '带边框单元格' ws['A1'].border = border wb.save('边框样式.xlsx')

6.4 背景色填充

python

运行

from openpyxl.styles import PatternFill from openpyxl import Workbook wb = Workbook() ws = wb.active # 黄色背景 fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid') ws['A1'] = '高亮单元格' ws['A1'].fill = fill wb.save('背景填充.xlsx')

七、公式与图表

7.1 Excel 公式计算

python

运行

from openpyxl import Workbook wb = Workbook() ws = wb.active ws['A1'] = 10 ws['A2'] = 20 ws['A3'] = 30 # 求和公式 ws['A4'] = '=SUM(A1:A3)' # 平均值 ws['A5'] = '=AVERAGE(A1:A3)' wb.save('公式计算.xlsx')

7.2 生成柱状图

python

运行

from openpyxl import Workbook from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active # 写入数据 data = [ ['姓名', '成绩'], ['张三', 92], ['李四', 85], ['王五', 76], ] for row in data: ws.append(row) # 创建图表 chart = BarChart() data_ref = Reference(ws, min_col=2, min_row=1, max_row=4) labels_ref = Reference(ws, min_col=1, min_row=2, max_row=4) chart.add_data(data_ref, titles_from_data=True) chart.set_categories(labels_ref) ws.add_chart(chart, 'E1') wb.save('图表.xlsx')

八、批量自动化实战

8.1 批量生成 10 份成绩表

python

运行

from openpyxl import Workbook import os # 确保输出目录存在 if not os.path.exists('./output'): os.mkdir('./output') # 学生名单 students = ['张三', '李四', '王五', '赵六', '钱七'] for name in students: wb = Workbook() ws = wb.active ws.title = name ws['A1'] = f'{name} 个人成绩单' ws['A2'] = '科目' ws['B2'] = '分数' ws['A3'] = '语文' ws['A4'] = '数学' ws['A5'] = '英语' wb.save(f'./output/{name}_成绩表.xlsx') print("✅ 批量生成完成!")

8.2 批量读取汇总 Excel

python

运行

from openpyxl import load_workbook import os # 汇总表 wb_total = Workbook() ws_total = wb_total.active ws_total.title = '汇总表' ws_total.append(['姓名', '语文', '数学', '英语']) # 遍历文件夹 for filename in os.listdir('./output'): if filename.endswith('.xlsx'): wb = load_workbook(f'./output/{filename}') ws = wb.active name = filename.split('_')[0] yw = ws['B3'].value sx = ws['B4'].value yy = ws['B5'].value ws_total.append([name, yw, sx, yy]) wb_total.save('汇总结果.xlsx')

九、最佳实践分享

最佳实践一:先结构后数据

  • 先写表头,再批量写数据
  • 统一样式后再应用,避免重复设置

最佳实践二:路径规范

  • 使用相对路径或绝对路径
  • 大批量操作先判断文件是否存在

最佳实践三:性能优化

  • 大数据量使用values_only=True读取
  • 批量写入用append而非循环赋值
  • 操作完成及时保存

最佳实践四:格式规范

  • 数字保持数值类型
  • 日期使用标准格式
  • 公式避免手动计算

十、常见问题解答

Q1:openpyxl 不支持 .xls 格式?

A:不支持。只支持.xlsx。可另存为 xlsx 再处理。

Q2:保存报错权限被拒绝?

A:关闭已打开的 Excel 文件再运行。

Q3:打开 Excel 显示 “已损坏”?

A:不要手动中断程序,确保wb.save()正常执行。

Q4:样式不生效?

A:必须对单元格设置样式,而非整行整列。

Q5:读取不到数据?

A:确认load_workbook加载的是正确文件。


十一、未来发展趋势

  1. AI + Excel 自动化:AI 自动生成报表、分析数据
  2. 云端自动化:对接钉钉 / 飞书 / 企业微信自动发送
  3. 大数据处理:配合 pandas 高效处理百万行数据
  4. 低代码平台:可视化配置一键生成 Excel

十二、本章小结

12.1 核心要点回顾

✅ 本章完整覆盖:

  1. 安装与快速入门
  2. 单元格、行、列批量写入
  3. 按行、按列、按区域读取
  4. 字体、边框、对齐、颜色等样式
  5. Excel 公式与图表生成
  6. 批量创建、批量读取、批量汇总实战
  7. 最佳实践与高频问题解决

12.2 学习建议

  1. 先跑通示例代码,再修改参数练习
  2. 结合自己工作做实战(报表、统计表、台账)
  3. 大数据量配合 pandas 使用更高效
  4. 样式复杂先做模板再用 Python 填充

十三、课后练习

  1. 基础练习:创建带表头、3 行数据、边框居中的 Excel
  2. 进阶练习:读取任意 Excel 并输出所有内容
  3. 实战练习:批量生成 20 份带格式的员工信息表

十四、参考资料

  1. openpyxl 官方文档:https://openpyxl.readthedocs.io
  2. Python 官方文档:https://docs.python.org
  3. Office Open XML 规范:https://learn.microsoft.com

💬 本文全套代码100% 可直接复制到 CSDN 运行,注释超详细,零基础也能轻松吃透 openpyxl!专注分享 Python 办公自动化、数据分析、爬虫实战、模块精讲等硬核干货,全程落地、拒绝水文!

点赞 + 收藏 + 关注,下期带来更多能直接提升职场效率的 Python 神器,让你用代码解放双手,少加班、多赚钱!

http://www.jsqmd.com/news/705796/

相关文章:

  • 20世纪80年代Commodore 64游戏音乐源文件公开,可自由修改但需注明原作者
  • 2026年中国战略咨询机构综合实力TOP 20
  • 开源多媒体工具箱BitFun:本地化自动化处理图片视频音频
  • 深度解析Docker 24.0+新特性:rootless mode + seccomp-bpf v2如何重构AI沙箱安全基线
  • AI 时代的“守门人”:联邦学习与隐私计算,留学生弯道超车的核心密码
  • HTML(5) 代码规范
  • 5分钟在Windows 10上畅玩安卓应用:WSA反向移植完全指南
  • 【MCP 2026农业设备数据对接终极指南】:覆盖ISO 11783、CANopen与TSN时间敏感网络的3层协议适配实战
  • KV缓存技术:大语言模型推理加速的核心机制
  • Android研发主任工程师在汽车行业的云端系统开发实践
  • 2025届必备的AI学术助手横评
  • 定义者战略:企业家的必然选择不是要不要做定义者,而是你已经在为“不被定义”支付代价
  • LeetCode热题100-杨辉三角
  • PyTorch 2.8环境配置全攻略:JDK 1.8与深度学习Java接口搭建
  • CAD_Sketcher:让Blender设计师从“手绘思维“升级到“工程思维“的智能约束系统
  • 小梦音乐下载器
  • 深入理解Android系统开发:SDK方向工程师的全面指南
  • CNN新闻数据集预处理实战:从下载到清洗的完整指南
  • 基于LLM的智能笔记生成器:从原理到工程实践
  • Go应用性能监控实战:深入解析gorelic运行时指标采集与APM集成
  • 揭秘抖音视频下载神器:让内容获取效率提升300%的智能解决方案
  • 5个DirectInput转XInput实战技巧:解决老旧游戏手柄兼容性问题的完整指南
  • 【限时技术白皮书】Docker WASM边缘部署Checklist(含12个生产环境故障代码片段)
  • simple_sq_music_plus
  • 深度解析AI软件工程师(并行计算方向)核心技术栈与面试指南
  • EdgeChains:基于Java响应式编程构建生产级大语言模型应用框架
  • PHP移动设备检测实战:Mobile_Detect库原理、集成与性能优化
  • 如何解决Windows 11 22631版本中的系统兼容性问题修复难题?
  • Space Thumbnails:Windows资源管理器3D模型缩略图预览的终极解决方案
  • 嵌入式系统与安卓驱动开发深度指南