python快速拆分excel文件中的所有sheet表的实用脚本

 更新时间:2025年07月29日 09:55:37   作者:Kyln.Wu  
在数据处理、财务分析以及其他领域中,经常需要对大型Excel文件进行管理,本文将介绍如何使用Python编写一个脚本,可以将一个excel文件中的所有sheet表拆成单独的文件并保持表格的格式,需要的小伙伴可以了解下

引言

在数据处理、财务分析以及其他领域中,经常需要对大型Excel文件进行管理。一个常见的需求是将包含多个工作表(或称工作簿)的Excel文件拆分成独立的Excel文件,以便于后续操作和管理。本文将介绍如何使用Python编写一个脚本,实现这一功能,并详细解释代码的功能、应用场景以及如何对其进行扩展。

代码解析

1.导入必要的库

from tkinter import filedialog, messagebox

这里导入了tkinter库中的filedialogmessagebox模块,用于创建用户界面组件(如文件选择框)和显示提示信息。

2.定义打开文件的函数 open_file()

def open_file():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    return f_path

该函数使用tkinter中的askopenfilename()方法创建一个文件选择框,用户可以选择任意Excel文件。调用root.withdraw()后隐藏主窗口,返回用户的选中路径。

3.定义处理工作表并拆分的函数 sheet2excel()

获取保存路径:通过再次使用tkinter中的组件创建一个对话框,允许用户指定保存的目标目录。

def save_directory():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askdirectory()
    return f_path

读取原Excel文件

origin_excel = load_workbook(filename=file_path)
origin_sheet_names = origin_excel.sheetnames

使用load_workbook()方法读取Excel文件,并获取所有工作表(sheet)的名称。

显示提示信息:使用messagebox.showinfo()提示用户当前处理的情况。

messagebox.showinfo('提示', f'一共有{len(origin_sheet_names)}个sheet,名称分别为:{origin_sheet_names}\n拆分开始')

处理每个工作表并保存为单独文件

if len(origin_sheet_names) > 1:
    for j in range(len(origin_sheet_names)):
        wb = load_workbook(filename=file_path)
        sheet = wb[origin_sheet_names[j]]
        wb.copy_worksheet(sheet)
        new_filename = origin_sheet_names[j] + '.xlsx'
        # 删除多余的工作表
        for i in range(len(origin_sheet_names)):
            sheet1 = wb[origin_sheet_names[i]]
            wb.remove(sheet1)
        new_path = save_path + "/" + new_filename
        messagebox.showinfo('提示', f"{new_filename} 已保存到{save_path}")
        wb.save(filename=new_path)
        # 调整工作表名称字段
        new = load_workbook(filename=new_path)
        news = new.active
        news.title = origin_sheet_names[j]
        new.save(filename=new_path)
    messagebox.showinfo('提示', '拆分完成!')
else:
    raise Exception('提示', f"你的文件只有一个sheet,难道还要拆分吗?你的文件名{file_path}")

这部分代码的主要逻辑包括:

  • 遍历每个工作表
  • 复制工作表并将其命名为当前工作表的名称
  • 删除多余的工作表
  • 保存到指定目录,并调整工作表名称字段以确保文件名正确

应用场景

该脚本适用于以下情况:

  • 大型Excel文件处理:当需要将包含多个工作表的大文件拆分成独立的小文件以便管理或导入其他系统。
  • 自动化数据迁移:在自动化工作中,经常需要将处理后的数据保存到特定目录中。此脚本可以作为基础,结合自动化流程使用。
  • 数据清洗与分析:对多个工作表分别进行清洗和分析后,可能需要将结果分开存储以便后续操作。

扩展与改写

1.增加更多功能

  • 添加错误处理模块,以捕捉在复制或保存过程中可能出现的错误。
  • 支持其他格式文件(如CSV、TXT等)的转换。
  • 提供批量处理选项,例如按名称或扩展名分类工作表。

2.优化性能

  • 使用xlrd库或其他高效的Excel解析库来提高读取速度。
  • 添加日志记录功能,以追踪处理过程中的每一步操作,便于调试和监控。

3.界面改进

  • 将现有代码整合到一个完整的GUI应用程序中,增加更多的用户交互选项(如可以选择保存格式、颜色调整等)。
  • 提供多语言支持或国际化字符串。

完整代码

# -*- coding:   utf-8 -*-
# @Time     :   2023-02-11 10:25   
# @Author   :   Kyln.Wu
# @Email    :   kylnwu@qq.com
# @FileName :   把一个工作簿里的所有sheet拆分为单独文件.py
# @IDE      :   PyCharm
from openpyxl import load_workbook
from tkinter import filedialog
import tkinter as tk
from tkinter import messagebox


def open_file():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    return f_path


def sheet2excel(file_path):
    # 先读取一次文件,获取sheet表的名称
    messagebox.showinfo("第二步", "请选择保存的文件夹:")

    def save_directory():
        root = tk.Tk()
        root.withdraw()
        f_path = filedialog.askdirectory()
        return f_path

    save_path = save_directory()
    origin_excel = load_workbook(filename=file_path)  # 读取原excel文件
    origin_sheet_names = origin_excel.sheetnames  # 获取sheet的名称
    messagebox.showinfo('提示', f'一共有{len(origin_sheet_names)}个sheet,名称分别为:{origin_sheet_names}\n拆分开始')

    if len(origin_sheet_names) > 1:  # 如果sheetnames小于1,报错:该文件不需要拆分
        for j in range(len(origin_sheet_names)):
            wb = load_workbook(filename=file_path)  # 再读取一次文件,由于每次删除后需要保存一次,所以不能与上一次一样
            sheet = wb[origin_sheet_names[j]]
            wb.copy_worksheet(sheet)
            new_filename = origin_sheet_names[j] + '.xlsx'  # 新建一个sheet命名的excel文件
            for i in range(len(origin_sheet_names)):
                sheet1 = wb[origin_sheet_names[i]]
                wb.remove(sheet1)
            new_path = save_path + "/" + new_filename
            messagebox.showinfo('提示', f"{new_filename} 已保存到{save_path}")
            wb.save(filename=new_path)
            # 由于使用copy_worksheet后,sheet表名有copy字段,这里做个调整
            new = load_workbook(filename=new_path)
            news = new.active
            news.title = origin_sheet_names[j]
            new.save(filename=new_path)
        messagebox.showinfo('提示', '拆分完成!')
    else:
        raise Exception('提示', f"你的文件只有一个sheet,难道还要拆分吗?你的文件名{file_path}")


if __name__ == '__main__':
    messagebox.showinfo("第一步", "选择要拆解的excel文件:")
    path = open_file()
    sheet2excel(path)

总结

该Python脚本通过简单的循环和文件操作实现了将Excel工作簿中的所有工作表拆分成独立文件的功能。尽管代码较为基础,但对于处理需要独立工作表的场景来说已经足够。通过增加更多的功能和优化性能,可以进一步提升脚本的应用价值。

到此这篇关于python快速拆分excel文件中的所有sheet表的实用脚本的文章就介绍到这了,更多相关python拆分excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 实现dict转json并保存文件

    python 实现dict转json并保存文件

    今天小编就为大家分享一篇python 实现dict转json并保存文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 卷积神经网络的发展及各模型的优缺点及说明

    卷积神经网络的发展及各模型的优缺点及说明

    这篇文章主要介绍了卷积神经网络的发展及各模型的优缺点及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python + Requests + Unittest接口自动化测试实例分析

    Python + Requests + Unittest接口自动化测试实例分析

    这篇文章主要介绍了Python + Requests + Unittest接口自动化测试,结合具体实例形式分析了Python使用Requests与Unittest模块实现接口自动化测试相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • Python类的动态绑定实现原理

    Python类的动态绑定实现原理

    这篇文章主要介绍了Python类的动态绑定实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python调用百度地图WEB服务API获取地点对应坐标值

    python调用百度地图WEB服务API获取地点对应坐标值

    这篇文章主要为大家详细介绍了python调用百度地图WEB服务API获取地点对应坐标值,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python中分布式框架Ray扩展的详细指南

    Python中分布式框架Ray扩展的详细指南

    Ray 是一个开源的分布式计算框架,专为扩展 Python 应用程序而设计,尤其在人工智能和机器学习领域表现出色,下面小编就为大家介绍一下关于 Python Ray 扩展的详细指南吧
    2025-06-06
  • Python 不设计 do-while 循环结构的理由

    Python 不设计 do-while 循环结构的理由

    Python作为一种语言不支持do-while循环。 但是,我们可以采用一种变通方法来模拟do-while循环 。下面通过本文给大家分享下Python 不设计do-while 循环结构的理由,需要的朋友可以参考下
    2022-01-01
  • 详解Python中range()与xrange()的区别

    详解Python中range()与xrange()的区别

    range() 和 xrange() 是两个函数,可用于在 Python的 for 循环中迭代一定次数。本文将通过示例详细说说二者的区别与使用,需要的可以参考一下
    2022-09-09
  • Python实现base64编码

    Python实现base64编码

    这篇文章介绍了Python实现base64编码的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python logging通过json文件配置的步骤

    python logging通过json文件配置的步骤

    这篇文章主要介绍了python logging通过json文件配置的步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论