python操作excel-->(把excel文件中的多个sheet拆成单个excel文件)

from openpyxl import load_workbook
from tkinter import filedialog
import tkinter as tk
from utils.logging_tool.log_control import INFO





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



def sheet2excel(file_path):
    # 先读取一次文件,获取sheet表的名称
    INFO.logger.info("选择保存的文件夹:")

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

    path = save_directory()
    origin_excel = load_workbook(filename=file_path)  # 读取原excel文件
    origin_sheet_names = origin_excel.sheetnames  # 获取sheet的名称
    INFO.logger.info(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 = path + "/" + new_filename
            INFO.logger.info(new_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)
        INFO.logger.info('拆分完成!')
    else:
        raise Exception(f"你的文件只有一个sheet,难道还要拆分吗?你的文件名{file_path}")


if __name__ == '__main__':
    INFO.logger.info("选择要拆解的excel文件:")
    path = open_file()
    sheet2excel(path)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值