一、批量重命名一个工作簿中的所有工作表
工作簿中有10个工作表,每张工作表的名字中都带有“2020年”字样,想把这几个字去掉。虽然说一个一个的重命名也花不了多少时间,但是如果这个工作簿中有100张工作表中,有100个工作簿都需要重命名下工作表名呢?可以想象,一个一个的去改名该是多大的工作量?不用担心,教你个绝招,使用Python几秒钟就搞定了,请看代码:
# -*- coding: utf-8 -*-
__author__ = 'ouyangmin'
__time__ = '2021/2/14 15:43'
import xlwings as xw #导入xlwings模块
app = xw.App(visible = False, add_book = False) #启动Excel程序
workbook = app.books.open('e:\\table\\统计表.xlsx') #打开指定目录下的工作簿
worksheets = workbook.sheets #获取该工作簿中的所有工作表
for i in range(len(worksheets)): #遍历获取到的工作表
worksheets[i].name = worksheets[i].name.replace('2020年', '') #重命名工作表,将2020年替换为空白
workbook.save('e:\\table\\统计表1.xlsx') #将重命名之后的工作簿重新保存
app.quit() #退出Excel程序
1、for i in range(len(worksheets)): 这行代码的意思是,len(worksheets)获取该工作簿中的工作表的个数,然后用range()函数根据工作表的个数生成了一个从0开始的整数序列。
2、如果不是去掉“2020年”而是去掉其他字呢?
修改worksheets[i].name = worksheets[i].name.replace('2020年', ''),将“2020年”换成其他字即可。
3、如果是将“2020年”修改为“2021年”呢?
修改worksheets[i].name = worksheets[i].name.replace('2020年', '')为worksheets[i].name = worksheets[i].name.replace('2020年', '2021年')
4、如果不想将重命名之后的文件另存而是直接保存呢?
修改workbook.save('e:\table\统计表1.xlsx')为 workbook.save('')即可。
二、批量重命名一个工作簿中的部分工作表
一个工作簿中有10张工作表,但是只想重命名其中的前5张工作表,应该怎么实现呢?相对于上段代码只需要修改for i in range(len(worksheets)): 为for i in range(len(worksheets))[:5]:即可。
# -*- coding: utf-8 -*-
__author__ = 'ouyangmin'
__time__ = '2021/2/14 15:43'
import xlwings as xw #导入xlwings模块
app = xw.App(visible = False, add_book = False) #启动Excel程序
workbook = app.books.open('e:\\table\\统计表.xlsx') #打开指定目录下的工作簿
worksheets = workbook.sheets #获取该工作簿中的所有工作表
for i in range(len(worksheets))[:5]: #通过切片来选中部分工作表
worksheets[i].name = worksheets[i].name.replace('2020年', '') #重命名工作表,将2020年替换为空白
workbook.save('e:\\table\\统计表1.xlsx') #将重命名之后的工作簿重新保存
app.quit() #退出Excel程序
举一反三:
1、如果不是前5张工作表,而是后5张工作表呢?
2、如果是想要修改第三张到第八张工作表呢?
3、如果是想要修改不连续的5张工作表呢?
三、批量重命名多个工作簿
要批量重命名多个工作簿,这些工作簿需要有一定的规律,比如表名都有关键字“XXX”,然后用Python代码将关键字“XXX”替换为“XXXXXX”。
实现代码如下:
# -*- coding: utf-8 -*-
__author__ = 'ouyangmin'
__time__ = '2021/2/16 07:00'
#如果该代码不能满足你的日常工作需求,可发邮件到liyysap@126.com ,说清楚需求,我尽力帮你实现~
import os
file_path = 'e:\\table\\产品销售表'
file_list = os.listdir(file_path)
old_book_name = '销售表' #给出工作簿名中需要替换的旧的关键字,而非工作簿名
new_book_name = '分部产品销售表' #给出工作簿名中要替换为的新关键字
for i in file_list:
if i.startswith('~$'): #判断是否有文件名以“~$”开头的临时文件
continue #如果有,则跳过这种类型的文件
new_file = i.replace(old_book_name, new_book_name) #执行查找和替换,生成新的工作簿名
old_file_path = os.path.join(file_path, i) #构造需要重命名工作簿的完整路径
new_file_path = os.path.join(file_path, new_file) #构造重命名后工作簿的完整路径
os.rename(old_file_path, new_file_path) #rename()是重命名函数,执行重命名
1、startswith()是Python内置的字符串函数,用户判断字符串是否以指定的子字符串开头。
startswith(substr,beg,end):substr为指定的子字符串,beg为可选参数,用于设置字符串检索的起始位置索引,默认为0,end为可选参数,用于设置字符串检索的结束位置索引,默认为字符串的长度。
2、os.path.join()是OS模块中的函数,用于把文件夹名和文件名拼接成一个完整路径。
os.path.join(path1,path2,【,......】) 可以是路径,也可以是文件夹名,还可以是文件名
四、批量重命名多个工作簿中的同名工作表
# -*- coding: utf-8 -*-
__author__ = 'ouyangmin'
__time__ = '2021/2/16 07:00'
#如果该代码不能满足您日常工作需求,可发邮件到liyysap@126.com ,说清楚您的需求,我尽力帮您实现哦
import os
import xlwings as xw
file_path = 'e:\\table\\信息表'
file_list = os.listdir(file_path)
old_sheet_name = 'Sheet1' #需要修改的表名
new_sheet_name = '员工信息' #修改后的表名
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
old_file_path = os.path.join(file_path, i)
workbook = app.books.open(old_file_path)
for j in workbook.sheets:
if j.name == old_sheet_name: #判断工作表名是否为“sheet1”
j.name = new_sheet_name #如果是,则重命名工作表
workbook.save() #保存工作簿
app.quit()