Python+Excel实现办公自动化_xlwings模块

一、使用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 批量合并多个工作簿中的同名工作表

未完

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值