【Python办公】Excel 批量拆分神器

张开发
2026/4/11 3:15:28 15 分钟阅读

分享文章

【Python办公】Excel 批量拆分神器
目录告别手动复制粘贴用 Python 打造你的专属“Excel 批量拆分神器” 工具核心功能展示️ 技术栈揭秘 核心代码解析1. 按列拆分逻辑2. 按行拆分逻辑3. 提升用户体验的小细节 如何打包分享给同事结语专栏导读 欢迎来到Python办公自动化专栏—Python处理办公问题解放您的双手️‍ 个人博客主页请点击—— 个人的博客主页 求收藏️‍ Github主页请点击—— Github主页 求Star⭐️‍ 知乎主页请点击—— 知乎主页 求关注️‍ CSDN博客主页请点击—— CSDN的博客主页 求关注 该系列文章专栏请点击——Python办公自动化专栏 求订阅 此外还有爬虫专栏请点击——Python爬虫基础专栏 求订阅 此外还有python基础专栏请点击——Python基础学习专栏 求订阅文章作者技术和水平有限如果文中出现错误希望大家能指正❤️ 欢迎各位佬关注 ❤️告别手动复制粘贴用 Python 打造你的专属“Excel 批量拆分神器”在日常的办公和数据处理中你是否经常遇到这样的场景老板扔给你一个包含几万行数据的总表让你按部门、按地区或者按月份拆分成几十个甚至上百个单独的 Excel 文件发给对应的负责人又或者由于系统导入限制你需要把一个几十万行的大表每 1000 行拆分成一个小表。如果是手动复制粘贴不仅费时费力还极容易出错。作为一名经常和数据打交道的“打工人”怎么能被这种机械的体力活打败今天我就带大家用 Python 结合 PyQt5从零打造一款带图形界面的**“Excel 批量拆分神器”**只需点点鼠标几秒钟就能搞定几小时的工作量 工具核心功能展示我们先来看看最终做出来的工具长什么样以及它能干什么友好的可视化界面 (GUI)告别黑乎乎的命令行支持直接拖拽文件或点击选择文件操作直观。两种核心拆分模式按列拆分智能读取表头提供下拉框供你选择需要拆分的列例如选“部门”列它就会自动按部门名称拆分出多个文件。按行数拆分支持输入指定的行数如每 500 行拆分一个文件。智能命名防冲突拆分后的文件会自动带上“序号分类名”并且自动过滤了文件名中的非法字符安全保存。实时日志与弹窗提示拆分进度一目了然任务完成时会有贴心的弹窗提醒。开箱即用的.exe程序利用 PyInstaller 打包没有 Python 环境的同事也能双击直接使用。️ 技术栈揭秘这套工具的底层逻辑其实非常清晰主要依赖于以下几个 Python 明星库pandas数据处理界的“扛把子”。用它的read_excel和to_excel方法加上简单的切片和过滤逻辑轻松完成数据的拆分。PyQt5负责门面担当。构建出现代化、响应式的桌面应用程序界面。calamine为了解决传统 openpyxl 读取大文件较慢的问题我们在 pandas 中指定了enginecalamine读取速度直接起飞。 核心代码解析虽然有几百行代码但最核心的“灵魂”其实都在后台拆分线程 (SplitWorker) 中。为了不让界面在处理大文件时卡死我们必须使用多线程QThread。1. 按列拆分逻辑如果用户选择“按列拆分”程序首先需要获取该列的所有唯一值然后循环过滤并保存# df 是读取进来的 pandas DataFramecolumn_nameself.split_value# 用户在下拉框选择的列名# 获取该列所有的唯一值去重unique_valuesdf[column_name].unique()fori,valueinenumerate(unique_values,1):# 过滤出当前分类的数据subsetdf[df[column_name]value]# 清理文件名中的非法字符非常重要的一步防止保存报错safe_valuestr(value)forcharinr\/:*?|:safe_valuesafe_value.replace(char,_)# 组合新文件名并导出output_fileos.path.join(self.output_dir,f{base_name}_{i:03d}_{safe_value}.xlsx)subset.to_excel(output_file,indexFalse)2. 按行拆分逻辑如果用户选择“按行数拆分”则主要利用 pandas 的iloc按行索引进行切片rows_per_fileint(self.split_value)# 用户输入的行数total_rowslen(df)# 计算总共需要拆分出几个文件num_files(total_rowsrows_per_file-1)//rows_per_fileforiinrange(num_files):# 计算当前文件的起始和结束索引start_idxi*rows_per_file end_idxmin((i1)*rows_per_file,total_rows)# 切片截取数据subsetdf.iloc[start_idx:end_idx]# 生成序号文件名并导出output_fileos.path.join(self.output_dir,f{base_name}_{i1:03d}.xlsx)subset.to_excel(output_file,indexFalse)3. 提升用户体验的小细节为了让工具看起来更专业我们在代码中加入了很多细节处理智能表头读取每次拖入新文件或修改“表头行数”时程序会只读取 0 行数据nrows0来快速获取列名并自动更新到下拉框中。PyInstaller 图标兼容使用sys._MEIPASS获取临时解压目录确保打包成.exe后图标依然能够正常显示defresource_path(self,relative_path):获取资源的绝对路径兼容PyInstaller打包后的临时目录ifhasattr(sys,_MEIPASS):returnos.path.join(sys._MEIPASS,relative_path)returnos.path.join(os.path.abspath(.),relative_path) 如何打包分享给同事写好代码只是第一步能让不懂编程的同事用起来才是真正的“造福人类”。首先准备一张好看的.png图标用 Python 转成.ico格式fromPILimportImage Image.open(拆分行.png).save(icon.ico,formatICO,sizes[(256,256)])使用 PyInstaller 执行一键打包pyinstaller--noconfirm--onefile--windowed--iconicon.ico--add-data拆分行.png;.--nameExcel批量拆分神器excel_splitter.py参数解释--onefile生成单文件--windowed隐藏黑框--add-data将图标资源内嵌到程序中。打包完成后你会在dist文件夹下得到一个名为Excel批量拆分神器.exe的文件。直接把它发给同事收获他们崇拜的目光吧结语从一行行重复的复制粘贴到几秒钟批量搞定Python 在办公自动化领域的威力不容小觑。通过这个项目我们不仅复习了 Pandas 的数据处理技巧还实战演练了 PyQt5 界面开发和多线程操作。希望这个“神器”能真正帮你和你的团队提高效率早点下班如果你对源码感兴趣或想二次开发欢迎在评论区交流讨论~(全文完)结尾希望对初学者有帮助致力于办公自动化的小小程序员一枚希望能得到大家的【❤️一个免费关注❤️】感谢求个 关注 ❤️ 喜欢 ❤️ 收藏 此外还有办公自动化专栏欢迎大家订阅Python办公自动化专栏此外还有爬虫专栏欢迎大家订阅Python爬虫基础专栏此外还有Python基础专栏欢迎大家订阅Python基础学习专栏

更多文章