Python批量处理工作簿和工作表的实现示例
目录
- 批量新建并保存工作簿
- 批量打开一个文件夹中的打开工作簿
- 批量重命名一个工作簿的所有工作表
- 批量重命名多个工作簿
- 批量重命名多个工作簿中的同名工作表
- 将一个工作簿的所有工作表批量复制到其他工作簿
- 按条件将一个工作表拆分为多个工作簿
批量新建并保存工作簿
代码
import xlwings as xw # 启动 Excel,但不新建工作簿 app = xw.App(visible=True,add_book=False) for i in range(5): #新建工作簿 workbook = app.books.add() #保存工作簿 workbook.save(f'test{i}.xlsx') #将工作簿关闭 workbook.close()
批量打开一个文件夹中的打开工作簿
import xlwings as xw import os # 给出工作簿所在的文件夹路径 path_file = r'E:/python1/python_module' # 列出该文件夹中所有的子文件或子文件夹 file_list = os.listdir(path_file) # 启动Excel app = xw.App(visible=True,add_book=False) for i in file_list: # 判断文件是否为 Excel文件 if os.path.splitext(i)[1] =='.xlsx': #打开 app.books.open(i)
批量重命名一个工作簿的所有工作表
import xlwings as xw # 启动Excel app = xw.App(visible=True,add_book=False) # 打开工作簿 workbook = app.books.open('table.xlsx') #获取工作簿的所有工作表 worhsheets = workbook.sheets for i in range(len(worhsheets)): # 重命名工作表 worhsheets[i].name = worhsheets[i].name.replace('销售','') #另存重命名后的工作簿 workbook.save('table1.xlsx') #退出Excel程序 app.quit()
批量重命名多个工作簿
不过这是有前提条件的,要重命名的工作簿名必
须是有规律的,如表1、表2、表3;或者含有相同的关键字。
import xlwings as xw import os # 给出工作簿所在的文件夹路径 path_file = r'E:/python1/python_module' # 列出该文件夹中所有的子文件或子文件夹 file_list = os.listdir(path_file) old_book_name = '销售表' new_book_name = '分部销售表' # 启动Excel app = xw.App(visible=True,add_book=False) for i in file_list: if i.startswith('~$'): continue # 执行查找和替换,生成新的工作簿名 new_file = i.replace(old_book_name,new_book_name) # 构造需要重命名工作簿的完整路径 old_path_filr = os.path.join(path_file,i) #构建重命名后工作簿的完整路径 new_path_file = os.path.join(path_file,new_file) # 重命名 os.rename(old_path_filr,new_path_file) if i.startswith('~$'): continue
因为Excel会在使用过程中生成一些文件名以"~$"开头的临时文件,如果有这些文件就跳过。
批量重命名多个工作簿中的同名工作表
步骤
- 打印出文件夹中所有子文件的名称
- 与文件夹路径拼接成完整的文件名后,打开
- 遍历文件中的所有工作表,如果名字相同就更改
- 保存工作表目录
代码:
import xlwings as xw import os # 给出工作簿所在的文件夹路径 path_file = r'E:/python1/python_module' # 列出该文件夹中所有的子文件或子文件夹 file_list = os.listdir(path_file) old_sheet = 'sheet1' new_sheet = '员工信息' app = xw.App(visible=True,add_book= False) # 遍历工作簿 for i in path_file: if i.startswith('~$'): continue # 拼接出完整路径 old_path_file = os.path.join(path_file,i) # 打开工作簿 workbook = app.books.open(old_path_file) # 遍历工作表 for j in workbook.sheets: if j.name == old_sheet: j.name = new_sheet # 保存工作簿 workbook.save() app.quit()
将一个工作簿的所有工作表批量复制到其他工作簿
步骤:
- 获取目标(复制到的)文件夹的所有子文件
- 打开源文件(被复制的),并获取其所有的工作表信息。
- 遍历所有的子文件,如果是Excel文件就打开
- 在目标工作簿中新增工作表
- 将来源工作表的数据写入新增工作表中
代码
import xlwings as xw import os # 给出工作簿所在的文件夹路径 path_file = r'E:/python1/python_module' # 列出该文件夹中所有的子文件或子文件夹 file_list = os.listdir(path_file) app = xw.App(visible=True,add_book= False) workbook = app.books.open('来源工作簿路径') worksheet = workbook.sheets # 子文件 for i in path_file: if os.path.splitext(i)[1] =='.xlsx': # 打开工作簿 workbooks = app.books.open(path_file+'/'+i) # 遍历工作表 for j in worksheet: # 读取工作表中的信息 contents = j.range('A1').expand('table').value # 读取工作表的名称 name = j.name # 增加同名的工作表 workbooks.sheets.add(name = name,after = len(workbooks.sheets)) # 写入数据 workbooks.sheets[name].range('A1').value = contents # 保存工作簿 workbook.save() app.quit()
.expand()是xlwings模块中的函数,用于扩展选择范围。语法格式如下
expand(mode) 默认值是 ‘table',表示向整个数据表扩展。也可以是'down'(下方)或'right'(右方)
按条件将一个工作表拆分为多个工作簿
import os import xlwings as xw filr_path = 'e:\\table\\产品统计表.xlsx' sheet_name = '统计表' app = xw.App(visible = True ,add_book= False) # 打开工作簿 workbooh = app.books.open(filr_path) # 获取指定的工作表 worksheet = workbooh.sheets[sheet_name] # 读取工作表中的所有信息 value = worksheet.range('A2').expand('table').value # 创建一个空字典用于按产品名称来分类存放数据 data = dict() #按行遍历工作表数据 for i in range(len(value)): # 获取当前行的第一个空格中的数据 product_name = value[i][1] # 如果没有该产品 if product_name not in data: # 创建一个与当前行名称对应的空列表 data[product_name] = [] # 将当前数据追加当列表中 data[product_name].append(value[i]) for key,value in data.items(): # 新建目标工作簿 new_workbook = app.books.add() #新建工作表 new_sheet = new_workbook.sheets.add(key) # 将要拆分的工作表的列标题复制到新建的工作表中 new_sheet['A1'].value = worksheet['A1:H1'].value # 将数据复制 new_sheet['A2'].value = value new_workbook.save('{}.xlsx'.format(key)) app.quit()
到此这篇关于Python批量处理工作簿和工作表的实现示例的文章就介绍到这了,更多相关Python批量处理工作簿和工作表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
赞 (0)