Python自动化办公之Excel拆分

devtools/2025/2/13 10:22:18/

在日常办公中,我们经常需要将包含多个Sheet页的Excel文件拆分成多个独立的Excel文件。例如,当我们要把一份Excel表格发给各部门确认时,出于控制信息知悉范围、确保数据保密性等方面的考虑,每个部门仅需查看和确认与自己部门对应的Sheet页。手动拆分Excel文件非常繁琐耗时,为了提高效率,我们可以使用Python编写一个自动化小工具,批量拆分Excel文件中的每个Sheet页为独立的Excel文件。

本文将分享如何使用Python实现批量Excel拆分的功能,并提供详细的代码解释。

1. 需求分析

  1. 保持原始Sheet页格式: 在拆分过程中,需要保证每个独立 Excel 文件中的内容格式与原 Excel 文件中对应 Sheet 页的格式完全一致,包括字体样式、单元格格式、颜色设置、对齐方式等,避免因格式丢失影响数据的查看和分析。
  2. 输出文件管理: 将拆分后的独立 Excel 文件统一存放到指定的输出文件夹中,便于管理和查找。同时,若输出文件夹已存在,应能妥善处理,避免文件冲突。

2. 安装依赖库

在开始之前,我们需要安装一些必要的Python库。我们将使用pywin32库来操作Excel文件。你可以通过以下命令安装:

pip install pywin32

3. 代码实现

以下是完整的Python代码,用于批量拆分Excel文件中的每个Sheet页为独立的Excel文件。代码中包含了详细的中文注释,方便理解。

excelpy_15">3.1 sheet2excel.py

python">import os
import shutil
import win32com.client
from tqdm import tqdmdef sheet2excel(input_excel_path, output_path):"""将Excel文件中的每个Sheet页拆分为独立的Excel文件:param input_excel_path: 输入的Excel文件路径:param output_path: 输出的文件夹路径"""# 获取当前脚本所在的目录parent = os.path.dirname(os.path.realpath(__file__))# 初始化Excel应用程序excel = win32com.client.Dispatch("Excel.Application")excel.Visible = False  # 不显示Excel界面# 输出文件夹存在则删除重新创建output_dir_path = os.path.join(parent, output_path)if os.path.exists(output_dir_path):shutil.rmtree(output_dir_path)os.makedirs(output_dir_path)try:# 打开Excel文件wb = excel.Workbooks.Open(os.path.join(parent, input_excel_path))# 遍历每个Sheet页for sheet in tqdm(wb.Sheets, desc="EXCEL拆分"):# 复制当前Sheet页到一个新的工作簿sheet.Copy()# 保存新的工作簿为独立的Excel文件excel.ActiveWorkbook.SaveAs(os.path.join(output_dir_path, f"{sheet.Name}.xlsx"))# 关闭新的工作簿excel.ActiveWorkbook.Close()# 关闭原始工作簿wb.Close()finally:# 退出Excel应用程序excel.Quit()if __name__ == "__main__":# 示例:拆分当前目录下的example.xlsx文件,输出到output文件夹sheet2excel("example.xlsx", "output")

3.2 代码说明

  • win32com.client.Dispatch("Excel.Application"): 初始化Excel应用程序对象,用于操作Excel文件。

  • excel.Visible = False: 设置Excel应用程序不可见,避免在后台打开Excel界面。

  • shutil.rmtree(output_dir_path): 如果输出文件夹已存在,则删除该文件夹及其内容。

  • os.makedirs(output_dir_path): 创建输出文件夹。

  • wb = excel.Workbooks.Open(...): 打开指定的Excel文件。

  • sheet.Copy(): 复制当前Sheet页到一个新的工作簿。

  • excel.ActiveWorkbook.SaveAs(...): 将新的工作簿保存为独立的Excel文件。

  • excel.ActiveWorkbook.Close(): 关闭新的工作簿。

  • wb.Close(): 关闭原始工作簿。

  • excel.Quit(): 退出Excel应用程序。

4. 运行示例

假设我们有一个名为example.xlsx的Excel文件,其中包含三个Sheet页:Sheet1Sheet2Sheet3。我们可以通过以下代码将每个Sheet页拆分为独立的Excel文件,并保存到output文件夹中:

python">if __name__ == "__main__":sheet2excel("example.xlsx", "output")

运行后,output文件夹中将生成三个独立的Excel文件:Sheet1.xlsxSheet2.xlsxSheet3.xlsx

总结

通过本文介绍的Python代码,我们可以轻松实现批量拆分Excel文件的功能。这种方法不仅提高了工作效率,还减少了手动操作带来的错误风险。希望本文对你有所帮助,欢迎在评论区分享你的使用体验和改进建议。

如果你对其他自动化办公场景感兴趣,欢迎关注我的专栏,后续将分享更多实用的Python办公自动化技巧。


http://www.ppmy.cn/devtools/158453.html

相关文章

GO语言基础知识

一、引言 在当今快速发展的软件开发领域,Go语言(又称Golang)凭借其简洁的语法、强大的并发支持和高效的性能,逐渐成为许多开发者的首选编程语言之一。Go语言由Google团队开发,自2009年发布以来,已经在云原…

陶瓷膜分离技术在石油化工废水处理中的优势与应用

在当今的石油化工行业中,废水处理不仅是环保合规的必然要求,也是实现资源高效利用和可持续发展的关键环节。陶瓷膜分离技术,作为一项水处理技术,因其独特的性能优势,在处理石油化工废水方面展现出非常大的应用潜力和价…

4.Excel:李东阳-电器企业-本年度的生产与营销计划❗(18)

目录 NO1​ NO2​ NO3.4​ NO5VLOOKUP​ NO6VLOOKUP和MATCH​ NO7条件格式weekday​ NO8数据透视表​ NO9高级筛选​ 快速来到表格底部 NO1 NO2 导入txt文本格式的文件: 选中B3单元格→数据→获取外部数据对话框→现有链接→浏览更多:考生文件…

动态规划LeetCode-1049.最后一块石头的重量Ⅱ

有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&…

【测试开发】Python+Django实现接口测试工具

PythonDjango接口自动化 引言&#xff1a; 最近被几个公司实习生整自闭了&#xff0c;没有基础&#xff0c;想学自动化又不知道怎么去学&#xff0c;没有方向没有头绪&#xff0c;说白了其实就是学习过程中没有成就感&#xff0c;所以学不下去。出于各种花里胡哨的原因&#xf…

19.4.5 查询带聚合函数的SQL语句

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 前面第19.4.1节学习了返回多条数据的查询是采用OleDbCommand的ExecuteReader方法。如果带聚合…

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测&#xff1a; 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…

.Net使用EF Core框架如何连接Oracle

目录 一、Nutget包添加 二、 配置文件 三、创建实体类 四、创建数据库上下文类 五、将数据库上下文服务注册到容器 六、测试数据库数据 &#xff08;1&#xff09;编写PeopleController &#xff08;2&#xff09;编写People页面 一、Nutget包添加 一定要安装Oracle.Ma…