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

Written by

in

文章目录
  • 在数据处理、财务分析以及其他领域中,经常需要对大型Excel文件进行管理。一个常见的需求是将包含多个工作表(或称工作簿)的Excel文件拆分成独立的Excel文件,以便于后续操作和管理。本文将介绍如何使用Python编写一个脚本,实现这一功能,并详细解释代码的功能、应用场景以及如何对其进行扩展。
  • 1.导入必要的库 from tkinter import filedialog, messagebox 这里导入了tkinter库中的filedialog和messagebox模块,用于创建用户界面组件(如文件选择框)和显示提示信息。 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脚本实现将excel表格数据拆分成两个文件 Python实现将Sheet页拆分成单独的Excel文件 Python实现批量Excel拆分功能 Python如何将一个EXCEL表拆分多个excel表 Python将Excel表格按某列拆分为多个sheet实现过程 Python将一个Excel拆分为多个Excel
  • 目录
    • 引言
    • 代码解析
    • 应用场景
    • 扩展与改写
    • 完整代码
    • 总结

    在数据处理、财务分析以及其他领域中,经常需要对大型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脚本实现将excel表格数据拆分成两个文件
    • Python实现将Sheet页拆分成单独的Excel文件
    • Python实现批量Excel拆分功能
    • Python如何将一个EXCEL表拆分多个excel表
    • Python将Excel表格按某列拆分为多个sheet实现过程
    • Python将一个Excel拆分为多个Excel

    站内搜索