一、背景
由于工作做了一个项目,基于项目流程中的很多sheet文件需要单独导出来,想到用python实现批量导出。
二、思路
1、获取excel表中每个sheet的名字;
2、遍历,新建excel将sheet的内容复制到新表中;
3、本地重命名保存;
三、上代码直接撸
from openpyxl import load_workbook
def sheet2excel(path,file_name):
file_path=path+'/'+file_name
origin_excel = load_workbook(filename=file_path) # 读取原excel文件
origin_sheet_names = origin_excel.sheetnames # 获取sheet的名称
print(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
print(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)
print('拆分完成!')
else:
raise Exception(f"你的文件只有一个sheet,难道还要拆分吗?你的文件名{file_path}")
if __name__ == '__main__':
path=r'G:\产品开发推广流程梳理\IPD流程优化'
file_name='IPD开发流程图0830.xlsx'
sheet2excel(path,file_name)
只需要在path中填写,文件所在的路径,file_name中填写需要拆分的文件名称。