你是不是每天被Excel报表、Word合同、重复邮件折磨到怀疑人生?
我有个做财务的朋友,每周一要花4个小时合并5个部门的销售报表。格式不统一、数据重复、空值一堆……每次弄完都眼冒金星。
直到我给她写了个Python脚本,现在她点一下运行,3分钟搞定,剩下的时间用来摸鱼(不,是用来做数据分析)。
今天分享5个我在实战中总结的Python办公自动化技巧,全部附可直接运行的代码,看完就能落地。
一、Excel批量合并:3分钟搞定原本4小时的工作
职场中最耗时的莫过于合并多个Excel文件。手动复制粘贴不仅慢,还容易出错。
用pandas + openpyxl,一行代码读取,三行代码合并:
import pandas as pd import os from glob import glob def merge_excel_files(folder_path, output_file): all_data = [] excel_files = glob(os.path.join(folder_path, "*.xlsx")) for file in excel_files: df = pd.read_excel(file) all_data.append(df) combined_df = pd.concat(all_data, ignore_index=True) combined_df.to_excel(output_file, index=False) print(f"合并完成!共 {len(combined_df)} 条记录") # 使用示例 merge_excel_files("月度数据", "年度汇总.xlsx")
效果:原本4小时的合并工作,现在3分钟搞定,而且零错误。
二、数据清洗自动化:告别手动删重复项
客户给的数据经常格式混乱:有空行、有重复、日期格式不统一……
这个清洗脚本可以一键处理:
import pandas as pd def clean_data(file_path): df = pd.read_csv(file_path) # 删除空行 df = df.dropna() # 删除重复 df = df.drop_duplicates() # 格式标准化 df['phone'] = df['phone'].str.replace('-', '') df['date'] = pd.to_datetime(df['date']) df.to_csv('cleaned_data.csv', index=False) return df clean_data('messy_data.csv')
效果:原本每次30分钟的清洗工作,现在10秒完成。
三、Word批量生成:100份合同1分钟搞定
HR每个月要给新员工发合同,手动改名字、改日期、改薪资……累到手抽筋。
用python-docx批量生成,模板+数据=自动化:
from docx import Document import pandas as pd def generate_contracts(template_path, data_path, output_folder): df = pd.read_excel(data_path) for _, row in df.iterrows(): doc = Document(template_path) for para in doc.paragraphs: para.text = para.text.replace('{{姓名}}', str(row['姓名'])) para.text = para.text.replace('{{薪资}}', str(row['薪资'])) para.text = para.text.replace('{{日期}}', str(row['日期'])) output_path = f"{output_folder}/合同_{row['姓名']}.docx" doc.save(output_path) print(f"已生成 {len(df)} 份合同") generate_contracts('合同模板.docx', '员工名单.xlsx', '输出文件夹')
效果:100份合同从2小时缩短到1分钟。
四、邮件自动发送:定时推送不再忘
每周要给客户发进度报告,经常忙到忘记?
Python帮你定时自动发送:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_email(subject, body, to_list, attachment=None): msg = MIMEMultipart() msg['Subject'] = subject msg['From'] = 'your_email@example.com' msg['To'] = ', '.join(to_list) msg.attach(MIMEText(body, 'html', 'utf-8')) with smtplib.SMTP('smtp.example.com', 587) as server: server.starttls() server.login('your_email', 'your_password') server.send_message(msg) print(f"邮件已发送至 {len(to_list)} 位收件人") send_email( subject='项目进度更新', body='本周完成:xxx<br>下周计划:xxx', to_list=['team@example.com'] )
效果:配合Windows任务计划程序或Linux cron,实现完全自动化。
五、Pandas性能优化:处理大数据不再卡死
数据量一大,Pandas就卡死?试试这几招:
1. 用category类型压缩内存
df['province'] = df['province'].astype('category') # 内存从2.3GB降到412MB,降幅82%
2. 用eval替代apply,提速15倍
# 慢 df['new_col'] = df.apply(lambda row: row['a'] + row['b'] * row['c'], axis=1) # 快 df.eval('new_col = a + b * c', inplace=True)
3. 用Parquet替代CSV,读取快8.7倍
df.to_parquet('data.parquet', compression='snappy') df = pd.read_parquet('data.parquet')
据掘金博主"船长Talk"实测,用这5个技巧处理1.2亿行数据,时间从16小时压缩到23分钟。
写在最后
Python办公自动化的核心思路就一句话:把重复的事情交给代码,把思考的时间留给自己。
今天分享的5个技巧,覆盖了Excel处理、数据清洗、Word生成、邮件发送、性能优化,基本能解决80%的办公自动化需求。
你平时最耗时的重复工作是什么?欢迎在评论区聊聊,我帮你看看能不能用Python搞定。
本文部分技巧参考自掘金、CSDN、51CTO等平台热门文章,代码均经过实测可用。