目录
- 一、使用Python批量处理工作簿和工作表)
- 案例01 批量新建并保存工作簿
- 案例02 批量打开一个文件夹下的所有工作簿
- 案例03 批量重命名一个工作簿中的所有工作表
- 案例04 批量重命名工作簿
- 4.1、批量重命名多个工作簿
- 4.2、批量重命名多个工作簿中的同名工作表
- 案例05 在多个工作簿中批量新增、删除工作表
- 5.1、在多个工作簿中批量新增工作表
- 5.2、在多个工作簿中批量删除工作表
- 案例06 批量打印工作簿
- 批量打印多个工作簿中的指定工作表
- 案例07 将一个工作簿的所有工作表批量复制到其他工作簿
- 7.1、将一个工作簿的所有工作表批量复制到其他工作簿
- 7.2、将指定工作表的数据批量复制到其他工作簿的指定工作表中
- 案例08 按条件将一个工作表拆分为多个工作簿
- 案例09 批量合并多个工作簿中的同名工作表
一、使用Python批量处理工作簿和工作表)
案例01 批量新建并保存工作簿
## 批量新建并保存工作簿
import xlwings as xw
# 启动excelc程序,但不新建工作簿
app = xw.App(visible = True, add_book = False)
for i in range(6):
workbook = app.books.add() #新建工作簿
workbook.save(f'path')
## 批量新建并关闭工作簿
import xlwings as xw
app = xw.App(visible = True, add_book = False)
for i in range(6):
workbook = app.books.add()
workbook.save(f'path')
workbook.close() # 关闭当前工作簿
app.quit()
案例02 批量打开一个文件夹下的所有工作簿
import os
import xlwings as xw
file_path = 'path' #工作簿所在的文件夹路径
file_list = os.listdir(file_path) # 列出路径下所有文件和子文件夹的名称
app = xw.App(visible = True, add_book = False) # 启动Excel程序
for i in file_list:
#splitext()函数是用来分离文件主名和扩展名的
if os.path.splitext(i)[1] == '.xlsx': #判断文件夹下扩展名是否为xlsx;
app.books.open(file_path + '\\' + i) # 打开工作簿
案例03 批量重命名一个工作簿中的所有工作表
import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('path') # 打开工作簿
worksheets = workbook.sheets # 获取工作簿中所有工作表
for i in range(len(worksheets)): # 遍历获取到的工作表
worksheets[i].name = worksheets[i].name.replace('old', 'new') # 重新命名
workbook.save('path') # 另存工作簿
app.quit() # 退出Excel程序
案例04 批量重命名工作簿
4.1、批量重命名多个工作簿
import os
file_path = 'path' # 给出待重命名工作簿所在文件夹的路径
file_list = os.listdir(file_path) #列出文件夹下所有的文件以及子文件夹的名称
old_book_name = 'old' # 工作簿中需要替换的关键字
new_book_name = 'new' # 工作簿中需要替换为的新关键字
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) #执行重命名
4.2、批量重命名多个工作簿中的同名工作表
import os
import xlwings as xw
file_path = 'path'
file_list = os.listdir(file_path)
old_sheet_name = 'Sheet1' # 给出需要修改的工作表名
new_sheet_name = '员工信息' # 列出修改后的工作表名
app = xw.App(visible = False, add_book = False) # 启动excel程序
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() # 退出程序
案例05 在多个工作簿中批量新增、删除工作表
5.1、在多个工作簿中批量新增工作表
import os
import xlwings as xw
file_path = 'path' # 要新增工作表的工作簿所在的文件夹路径
file_list = os.listdir(file_path) # 列出文件夹下的所有文件名和子文件夹的名称
sheet_name = 'new_sheet' #要新增的工作表的名称
app = xw.App(visible = False, add_book = False) # 启动excel程序
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i) # 构造需要新增工作表的工作簿下的文件路径
workbook = app.books.open(file_paths) # 打开工作簿
sheet_names = [j.name for j in workbook.sheets] # 获取工作簿中工作表的名称
if sheet_name not in sheet_names: # 判断是否已存在要新增的工作表名称
workbook.sheets.add(sheet_name) # 不存在,则新增
workbook.save() # 保存工作簿
app.quit() # 退出excel程序
5.2、在多个工作簿中批量删除工作表
import os
import xlwings as xw
file_path = 'path'
file_list = os.listdir(file_path)
sheet_name = 'delete_sheetname' # 给出要删除的工作簿名称
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
for j in workbook.sheets:
if j.name == sheet_name:
j.delete()
break
workbook.save()
app.quit()
案例06 批量打印工作簿
批量打印多个工作簿中的指定工作表
import os
import xlwings as xw
file_path = 'path'
file_list = os.listdir(file_path)
sheet_name = 'printout_sheetname' # 要打印的工作表名称
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
# workbook.api.PrintOut() #打印工作簿
for j in workbook.sheets:
if j.name == sheet_name:
j.api.PrintOut() # 如果存在,则打印该工作表
break
app.quit()
案例07 将一个工作簿的所有工作表批量复制到其他工作簿
7.1、将一个工作簿的所有工作表批量复制到其他工作簿
import os
import xlwings as xw
app = xw.App(visible = False, add_book = False)
file_path = 'path' #给出目标工作簿所在的文件夹路径
file_list = os.listdir(file_path)
workbook = app.books.open('e:\\table\\信息表.xlsx') # 打开来源工作簿
worksheet = workbook.sheets # 获取来源工作簿的所有工作表
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx': #判断文件是否是工作簿
workbooks = app.books.open(file_path + '\\' + 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 # 将从来源工作簿中读取的工作表数据写入新增工作表中
workbooks.save() # 保存目标工作簿
app.quit() # 退出excel程序
7.2、将指定工作表的数据批量复制到其他工作簿的指定工作表中
import os
import xlwings as xw
app = xw.App(visible = False, add_book = False)
file_path = 'e:\\table\\销售表1'
file_list = os.listdir(file_path)
workbook = app.books.open('e:\\table\\新增产品表.xlsx')
worksheet = workbook.sheets['新增产品']
value = worksheet.range('A1').expand('table')
start_cell = (2, 1)
end_cell = (value.shape[0], value.shape[1])
cell_area = worksheet.range(start_cell, end_cell).value
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx':
try:
workbooks = xw.Book(file_path + '\\' + i)
sheet = workbooks.sheets['产品分类表']
scope = sheet.range('A1').expand()
sheet.range(scope.shape[0] + 1, 1).value = cell_area
workbooks.save()
finally:
workbooks.close()
workbook.close()
app.quit()
案例08 按条件将一个工作表拆分为多个工作簿
案例09 批量合并多个工作簿中的同名工作表
未完