【办公自动化实例】使用python 对excel文件多sheet表进行拆分

文章目录

        • 一、需求
        • 二、分析及思路
        • 三、整体代码
        • 四、效果截图

一、需求

1 遍历文件夹中的文件,如果excel文件中存在多个sheet,则将这些sheet表拆分处理,分别保存为独立的文件,并存入文件夹中,文件夹名同excel文件名;
2 在文件处理过程中,原表中的格式不能改变。
**** 有个情况:如果表格中有图片,目前带不出来。

二、分析及思路

1、遍历文件夹,筛选出文件为excel 的文件;
2、由于需要带格式拆分,所以不能使用pandas的方法,由于openpyxl模块不能在不同表间使用copy_worksheet的方法,这里采取先在复制需要拆分出来的sheet表,然后再删除原有表中的sheet表。

三、整体代码

from openpyxl import load_workbook
from openpyxl import Workbook
import shutil
import os

for file in os.scandir():
	if file.name.endswith('xlsx'):
		if not os.path.exists(file.name[:-5]):
			os.mkdir(file.name[:-5])

		# 先读取一次文件,获取sheet表的名称
		
		workbook = load_workbook(filename = file)  
		sheetnames = workbook.sheetnames

		if len(sheetnames)>1:
			for j in range(len(sheetnames)):

				# 再读取一次文件,由于每次删除后需要保存一次,所以不能与上一次一样

				wb = load_workbook(filename = file)  
				sheet = wb[sheetnames[j]]
				wb.copy_worksheet(sheet)

				new_filename = sheetnames[j]+'.xlsx'

				for i in range(len(sheetnames)):
					sheet1 = wb[sheetnames[i]]
					wb.remove(sheet1)

				wb.save(filename = new_filename)    

				# 由于使用copy_worksheet后,sheet表名有copy字段,这里做个调整

				new = load_workbook(filename=new_filename)   
				news = new.active
				news.title=sheetnames[j]
				new.save(filename=new_filename)
				path = file.name[:-5]+'\\'+new_filename
				shutil.move(new_filename,path)

四、效果截图

1 拆分前:
【办公自动化实例】使用python 对excel文件多sheet表进行拆分_第1张图片

2 拆分后:
【办公自动化实例】使用python 对excel文件多sheet表进行拆分_第2张图片

你可能感兴趣的:(办公自动化)