Excel太多,手动拆分累成狗?Pyson让你一杯咖啡的功夫全自动搞定!
大家好,我是你们的Python办公助手。
上篇文章教大家用Python合并多个Excel文件,不少读者反馈:能不能来个拆分的教程?毕竟合并简单,拆分才是真正的噩梦——一个几百兆的销售总表,要按部门拆成十几个文件,手动复制粘贴一上午就没了。
今天它来了!用Python批量拆分Excel,不管你要按部门、按月份还是按地区拆分,10行代码全自动搞定。小白也能学会,因为代码都是现成的,你改个路径就行!
—
一、什么时候需要拆分Excel?
举个真实案例:
小王是公司销售助理,每月要处理一张“全国销售总表”,里面有几千行数据,包含“销售部门”、“销售员”、“销售额”、“日期”等列。老板要求:每个部门单独发一份数据给他们自己核对。
以前小王怎么做?筛选部门A,复制,新建文件,粘贴;再筛选部门B,复制,新建文件,粘贴……十几个部门搞下来,眼睛都花了,还经常漏掉几行。
用Python:2秒,所有部门文件自动生成,还带原表头。
—
二、准备工作
1. 安装Python库
打开命令提示符(Win+R输入cmd),依次输入:
“`bash
pip install pandas openpyxl
“`
· pandas:核心数据处理库。
· openpyxl:读写Excel文件的引擎(支持.xlsx格式)。
2. 准备测试文件
在D盘新建一个文件夹,比如D:\销售数据,里面放一个Excel文件,叫全年销售总表.xlsx。假设数据如下:
销售部门 销售员 销售额 日期
销售一部 张三 10000 2025-01-05
销售二部 李四 15000 2025-01-06
销售一部 王五 8000 2025-01-07
销售三部 赵六 12000 2025-01-08
… … … …
我们的目标:按“销售部门”拆分成多个文件,每个文件只包含该部门的数据。
—
三、手把手写代码
第1步:导入库
“`python
import pandas as pd
import os
“`
第2步:读取总表
“`python
# 修改成你的文件路径
file_path = r’D:\销售数据\全年销售总表.xlsx’
df = pd.read_excel(file_path)
# 看看前几行,确认读取成功
print(df.head())
“`
运行后如果显示表格前5行,说明读取成功。
第3步:获取所有需要拆分的部门
“`python
# 假设“销售部门”列名就是“销售部门”
departments = df[‘销售部门’].unique() # 返回不重复的部门列表
print(f”共有 {len(departments)} 个部门:{departments}”)
“`
第4步:循环拆分并保存
“`python
# 指定输出文件夹(和原文件同一个文件夹)
output_dir = r’D:\销售数据\拆分结果’
os.makedirs(output_dir, exist_ok=True) # 如果文件夹不存在,自动创建
for dept in departments:
# 筛选出当前部门的数据
dept_data = df[df[‘销售部门’] == dept]
# 构造输出文件名,例如“销售一部.xlsx”
output_file = os.path.join(output_dir, f'{dept}.xlsx’)
# 保存到Excel,不要行索引
dept_data.to_excel(output_file, index=False)
print(f’已保存:{output_file},共 {len(dept_data)} 行’)
“`
完整代码(复制就能用)
“`python
import pandas as pd
import os
# === 配置部分(你只需要改这里)===
file_path = r’D:\销售数据\全年销售总表.xlsx’ # 要拆分的Excel文件
split_column = ‘销售部门’ # 按哪一列拆分
output_dir = r’D:\销售数据\拆分结果’ # 输出文件夹
# ================================
# 读取数据
df = pd.read_excel(file_path)
# 获取所有唯一值
unique_values = df[split_column].unique()
# 创建输出文件夹
os.makedirs(output_dir, exist_ok=True)
# 循环拆分
for value in unique_values:
subset = df[df[split_column] == value]
output_file = os.path.join(output_dir, f'{value}.xlsx’)
subset.to_excel(output_file, index=False)
print(f’已保存:{output_file},共 {len(subset)} 行’)
print(‘🎉 所有文件拆分完成!’)
“`
运行代码,你会看到控制台打印出每个部门的文件保存路径。打开拆分结果文件夹,所有部门文件整整齐齐躺好了!
—
四、进阶玩法(让你更强大)
1. 按多列组合拆分(比如按部门和月份)
如果想拆成“销售一部-1月”、“销售一部-2月”这种,可以用两列组合:
“`python
# 新增一列“部门-月份”
df[‘部门月份’] = df[‘销售部门’] + ‘-‘ + df[‘日期’].dt.month.astype(str) + ‘月’
split_column = ‘部门月份’
“`
2. 拆分后保留原Excel格式(列宽、字体等)
pandas保存的Excel默认不带格式,如果想保留原表的列宽,可以结合openpyxl稍作调整,但对小白来说可能复杂。如果对格式要求不高,上面的方法完全够用。
3. 拆分后自动发送邮件给各部门负责人
在循环保存文件后,可以调用Python的smtplib库自动发邮件,附上对应文件。这个我们以后专门讲。
4. 处理超大Excel文件(内存不足怎么办)
如果文件有几百万行,一次性读入内存可能爆掉。可以分块读取+分块拆分,但代码复杂一些。日常办公几千到几万行,上面的方法足够。
—
五、避坑指南
1. 列名不要有空格或特殊符号,最好统一成中文或英文,避免读取错误。
2. 文件路径用原始字符串(前面加r),例如r’D:\销售数据’,反斜杠就不会被转义。
3. 拆分依据列不能有空值,否则会生成一个nan.xlsx文件。可以先用df = df.dropna(subset=[split_column])删除空行。
4. 保存文件名不能包含非法字符,比如\ / : * ? ” < > |。如果部门名称里带有这些,需要替换掉。
—
六、写在最后
今天我们用十几行Python代码,实现了Excel文件的自动化拆分,告别手动筛选复制。以后再遇到类似任务,打开这个脚本,改个路径,喝杯咖啡的功夫就完成了。
你是不是也遇到过Excel拆分的烦恼? 欢迎在评论区留言,把你的场景告诉我,也许下一篇文章就是为你量身定制的!
如果你觉得这篇文章对你有帮助,请点赞、在看、分享一键三连,让更多朋友告别繁琐的手工操作。下一期,我们来聊聊 “如何用Python自动发送邮件,并附上附件”,让你的办公自动化更进一步!
我是你们的Python办公助手,我们下期见!
—
互动话题:除了拆分Excel,你还想用Python自动处理什么办公任务?评论区告诉我,呼声高的优先安排!
夜雨聆风