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中的Joblib库使用学习总结

    Python中的Joblib库使用学习总结

    这篇文章主要介绍了Python中的Joblib库使用学习总结,Joblib是一组在Python中提供轻量级流水线的工具,Joblib已被优化得很快速,很健壮了,特别是在大数据上,并对numpy数组进行了特定的优化,需要的朋友可以参考下
    2023-08-08
  • Python中的分布式框架Ray的安装与使用教程

    Python中的分布式框架Ray的安装与使用教程

    Ray框架下不仅可以通过conda和Python十分方便的构建一个集群,还可以自动的对分布式任务进行并发处理,且支持GPU分布式任务的提交,本文介绍了基于Python的分布式框架Ray的基本安装与使用,感兴趣的朋友一起看看吧
    2024-08-08
  • Python通过OpenCV的findContours获取轮廓并切割实例

    Python通过OpenCV的findContours获取轮廓并切割实例

    这篇文章主要介绍了Python通过OpenCV的findContours获取轮廓并切割实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python Opencv任意形状目标检测并绘制框图

    Python Opencv任意形状目标检测并绘制框图

    这篇文章主要为大家详细介绍了Python Opencv任意形状目标检测,并绘制框图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Python的闭包和装饰器你真的了解吗

    Python的闭包和装饰器你真的了解吗

    这篇文章主要为大家详细介绍了Python的闭包和装饰器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Python3基本输入与输出操作实例分析

    Python3基本输入与输出操作实例分析

    这篇文章主要介绍了Python3基本输入与输出操作,结合实例形式分析了Python3输入输出基本语法、编码转换、注释及中文编码相关使用技巧,需要的朋友可以参考下
    2020-02-02
  • Python使用Yagmail库实现自动化邮件营销

    Python使用Yagmail库实现自动化邮件营销

    在数字营销领域,自动化邮件营销是一种高效、低成本的方式,能够帮助企业与客户保持沟通,提升品牌忠诚度,而Yagmail是一个简洁且功能强大的Python库,可以大大简化邮件发送的过程,本文将详细介绍如何使用Yagmail库来实现自动化邮件营销,需要的朋友可以参考下
    2024-12-12
  • Python正则表达式中的量词符号与组问题小结

    Python正则表达式中的量词符号与组问题小结

    这篇文章主要介绍了Python正则表达式中的量词符号与组问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 快速解决jupyter notebook启动需要密码的问题

    快速解决jupyter notebook启动需要密码的问题

    这篇文章主要介绍了快速解决jupyter notebook启动需要密码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python实现线性插值的示例

    python实现线性插值的示例

    线性插值是针对一维数据的插值方法,它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计,这篇文章主要介绍了python实现线性插值,需要的朋友可以参考下
    2022-12-12

最新评论