一、需求
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 拆分前:
2 拆分后: