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

2022-09-19 09:57:38

一、使用Python批量处理工作簿和工作表)

案例01 批量新建并保存工作簿

## 批量新建并保存工作簿import xlwingsas xw# 启动excelc程序,但不新建工作簿
app= xw.App(visible=True, add_book=False)for iinrange(6): 
    workbook= app.books.add()#新建工作簿
    workbook.save(f'path')## 批量新建并关闭工作簿import xlwingsas xw
app= xw.App(visible=True, add_book=False)for iinrange(6):
    workbook= app.books.add()
    workbook.save(f'path')
    workbook.close()# 关闭当前工作簿
app.quit()

案例02 批量打开一个文件夹下的所有工作簿

import osimport xlwingsas xw
file_path='path'#工作簿所在的文件夹路径
file_list= os.listdir(file_path)# 列出路径下所有文件和子文件夹的名称
app= xw.App(visible=True, add_book=False)# 启动Excel程序for iin file_list:#splitext()函数是用来分离文件主名和扩展名的if os.path.splitext(i)[1]=='.xlsx':#判断文件夹下扩展名是否为xlsx;
        app.books.open(file_path+'\\'+ i)# 打开工作簿

案例03 批量重命名一个工作簿中的所有工作表

import xlwingsas xw
app= xw.App(visible=False, add_book=False)
workbook= app.books.open('path')# 打开工作簿
worksheets= workbook.sheets# 获取工作簿中所有工作表for iinrange(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 iin 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 osimport xlwingsas 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 iin file_list:if i.startswith('~$'):continue
    old_file_path= os.path.join(file_path, i)
    workbook= app.books.open(old_file_path)#打开工作簿for jin workbook.sheets:# 遍历工作簿里面的工作表if j.name== old_sheet_name:# 判断工作表名是否为sheet1
            j.name= new_sheet_name# 如果是则重命名
    workbook.save()# 保存工作簿
app.quit()# 退出程序

案例05 在多个工作簿中批量新增、删除工作表

5.1、在多个工作簿中批量新增工作表

import osimport xlwingsas xw
file_path='path'# 要新增工作表的工作簿所在的文件夹路径
file_list= os.listdir(file_path)# 列出文件夹下的所有文件名和子文件夹的名称
sheet_name='new_sheet'#要新增的工作表的名称
app= xw.App(visible=False, add_book=False)# 启动excel程序for iin file_list:if i.startswith('~$'):continue
    file_paths= os.path.join(file_path, i)# 构造需要新增工作表的工作簿下的文件路径
    workbook= app.books.open(file_paths)# 打开工作簿
    sheet_names=[j.namefor jin workbook.sheets]# 获取工作簿中工作表的名称if sheet_namenotin sheet_names:# 判断是否已存在要新增的工作表名称
        workbook.sheets.add(sheet_name)# 不存在,则新增
        workbook.save()# 保存工作簿
app.quit()# 退出excel程序

5.2、在多个工作簿中批量删除工作表

import osimport xlwingsas xw
file_path='path'
file_list= os.listdir(file_path)
sheet_name='delete_sheetname'# 给出要删除的工作簿名称
app= xw.App(visible=False, add_book=False)for iin file_list:if i.startswith('~$'):continue
    file_paths= os.path.join(file_path, i) 
    workbook= app.books.open(file_paths)for jin workbook.sheets:if j.name== sheet_name:
            j.delete()break
    workbook.save()
app.quit()

案例06 批量打印工作簿

批量打印多个工作簿中的指定工作表

import osimport xlwingsas xw
file_path='path'
file_list= os.listdir(file_path)
sheet_name='printout_sheetname'# 要打印的工作表名称
app= xw.App(visible=False, add_book=False)for iin file_list:if i.startswith('~$'):continue
    file_paths= os.path.join(file_path, i)
    workbook= app.books.open(file_paths)# workbook.api.PrintOut() #打印工作簿for jin workbook.sheets:if j.name== sheet_name:
            j.api.PrintOut()# 如果存在,则打印该工作表break
app.quit()

案例07 将一个工作簿的所有工作表批量复制到其他工作簿

7.1、将一个工作簿的所有工作表批量复制到其他工作簿

import osimport xlwingsas 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 iin file_list:if os.path.splitext(i)[1]=='.xlsx':#判断文件是否是工作簿
        workbooks= app.books.open(file_path+'\\'+ i)# 打开目标工作簿for jin 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 osimport xlwingsas 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).valuefor iin 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 批量合并多个工作簿中的同名工作表

未完

  • 作者:cy^2
  • 原文链接:https://blog.csdn.net/qq_34120015/article/details/123620580
    更新时间:2022-09-19 09:57:38