Python办公自动化实战建议
Python做办公自动化,主要覆盖:Excel/Word/PPT处理、PDF、邮件、文件批量处理、网页数据抓取、自动填表、定时任务。下面分库选型、开发思路、避坑、工程化、落地技巧,全部是实际工作踩坑总结。
一、主流库选型(按场景)
1)Excel(最常用)
- openpyxl:读写xlsx,不支持xls;支持单元格样式、合并单元格、公式读写,优先选。适合日常报表、格式保留。
- pandas:大数据量表格、数据分析、多表合并、CSV;缺点:对单元格样式、图表支持很差,只关心数据就用pandas。
- xlrd+xlwt:老版,xlrd3不再支持xlsx,只用于古老
.xls,新项目尽量避开。 win32com( pywin32 ):直接调用本机Excel程序,可以完整执行宏、透视表、图表;只能Windows,需要安装Office。
建议:普通数据处理 → openpyxl/pandas;要操作宏、图表、打印 → pywin32com。
2)Word
- python‑docx:读写docx,不能读doc;处理段落、表格、样式;不支持页眉页脚复杂场景。
- pywin32com:Windows下操作真实Word,完美支持页眉、域、目录、旧doc文件。
3)PPT
- python‑pptx:读写pptx,修改文本、表格、图片;动画、母版部分功能有限。
- pywin32com:Windows完整操控PPT。
4)PDF
- PyPDF2 / pypdf:拆分、合并、旋转PDF,提取文本。
- pdfplumber:精准提取PDF表格,表格优先用它。
- reportlab:生成全新PDF。
- 注意:扫描版图片PDF,以上全部无效,需要OCR:pytesseract + Tesseract‑OCR
5)邮件收发
- smtplib + email:发送邮件,带附件;
imaplib:读取接收邮件;
企业邮箱很多需要授权码,不能直接用登录密码。
6)文件系统批量自动化
内置模块优先,不用装第三方:os、pathlib(强烈推荐pathlib,比os更简洁)、shutil批量复制移动重命名。
7)网页/表单自动化
- requests + BeautifulSoup:接口、静态网页爬数据。
- Selenium / Playwright:模拟浏览器操作,网页填表、导出报表;Playwright更稳定,自动等待,比selenium少写很多等待代码。
8)定时运行
- Windows:任务计划程序;Linux/macOS:cron
- Python库:
schedule库做简单循环定时;不建议生产环境用schedule替代系统定时,程序崩溃就停止。
⚠️ 跨平台提醒pywin32com只能Windows且本机必须安装微软Office;Mac/Linux无法调用,跨平台脚本优先选择 openpyxl/python‑docx/python‑pptx。
二、开发流程建议(非常重要)
1. 先梳理业务流程,不要上来直接写代码
- 把人工步骤拆解:输入文件是什么?每一步做什么?输出什么?异常会有哪些?
区分:哪些是纯数据逻辑,哪些需要Office原生UI/格式/打印。
如果大量复杂格式、宏、打印,优先考虑 pywin32com;纯数据处理尽量不用com,速度慢、容易卡死。
2. 开发原则
- 输入输出分离:原始文件放
input,生成结果输出到output,绝不修改原始源文件。 - 参数外部化:文件路径、报表名称、邮箱账号不要硬编码,写到配置文件
config.ini / json。 - 日志!日志!日志,使用python标准库
logging。自动化脚本半夜出错,没有日志完全不知道哪里崩了。 - 增加异常捕获 try‑except:文件找不到、单元格为空、格式错误要捕获,输出明确错误信息,不要直接崩溃。
- 小步迭代:先跑通一个样例文件,再批量处理全部文件。
示例简单日志模板
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler("run.log",encoding="utf‑8"),logging.StreamHandler()]
)三、高频踩坑点
com组件(pywin32)坑点
- 脚本异常退出时Excel/Word进程残留在后台,任务管理器一堆EXCEL.EXE,占用文件锁。
✅解决:必须try‑finally保证关闭app、quit,释放COM对象。
import win32com.client excel = None try: excel = win32com.client.Dispatch("Excel.Application") excel.Visible = False #业务代码 finally: if excel: excel.Quit()- 脚本异常退出时Excel/Word进程残留在后台,任务管理器一堆EXCEL.EXE,占用文件锁。
- 文件被占用报错:脚本运行时不要手动打开被操作的Excel。
- pandas丢失样式:pandas保存会抹掉全部单元格格式,如果需要保留原有格式,不要用pandas写回原文件,改用openpyxl。
- PDF扫描件不能提取文字:必须OCR,普通pdf库无效。
- 中文乱码:读写csv指定
encoding="utf‑8‑sig",Windows办公软件打开不乱码。 路径不要写死
C:\xxx,用pathlib做跨平台路径,避免反斜杠转义问题。from pathlib import Path BASE = Path(__file__).parent input_dir = BASE / "input" output_dir = BASE / "output" output_dir.mkdir(exist_ok=True) #不存在自动创建
四、脚本交付给非技术同事使用
同事不会装Python环境,两种方案:
使用
pyinstaller打包exe,把脚本打包成独立可执行程序。注意:打包com组件程序体积巨大;尽量把输入输出放到exe同级目录。
pyinstaller -F -w main.py-F单文件;‑w运行不弹出黑控制台窗口;调试阶段不要加‑w,看不到报错。- 如果条件允许,部署在服务器,做成简单Web界面:用Gradio / Streamlit,同事打开浏览器就能运行自动化脚本,不用安装任何东西。强烈推荐给业务部门,维护最简单。
五、什么时候不建议用Python做?
- 简单少量任务:每月1次,文件极少,写Python的时间比手动还久,不如手动。
- 极度复杂Office文档:大量VBA宏、复杂动态图表、域、复杂排版,用VBA更适配。
- 高并发多人协同编辑,Python不适合,优先用企业低代码、在线表格。
六、学习路线建议
- 基础:掌握pathlib、csv、logging基础工具;
- 高频:openpyxl + pandas处理Excel报表,这是办公自动化80%场景;
- 进阶:PDF提取表格、自动发邮件;
- 高阶:Playwright网页自动化、pywin32com操控Office;
- 工程化:配置文件、日志、异常、打包exe/Streamlit网页。
七、简单示例小模板(批量读取excel输出新表)
from pathlib import Path
from openpyxl import load_workbook
base = Path(__file__).parent
wb = load_workbook(base/"input"/"数据.xlsx")
ws = wb.active
for row in ws.iter_rows(min_row=2,values_only=True):
name,value = row[0],row[1]
print(name,value)
wb.save(base/"output"/"结果.xlsx")
wb.close()