(๑•͈ᴗ•͈)❀送花给你

python:批量处理工作簿和工作表

新建工作簿

import xlwings as xw
#新建并保存工作簿
def demo_Func1():
    app=xw.App(visible=True,add_book=False)#启动并不新建工作簿
    workbook=app.books.add()#新建工作簿
    workbook.save('C:\\Users\\14486\\Desktop\\测试文件\\左\\新建工作簿.xlsx')
    workbook.close()#关闭当前工作簿
    app.quit()#退出Excel程序

 打开工作簿

import xlwings as xw
import os

#打开一个工作夹下所有工作簿
def demo_Func2():
    file_path='C:\\Users\\14486\\Desktop\\测试文件\\左'
    file_list=os.listdir(file_path)  #获取路径下所有文件和文件夹的名称
    app = xw.App(visible=True, add_book=False)
    for i in file_list:
        if os.path.splitext(i)[1]=='.xlsx':
            app.books.open(file_path+'\\'+i) #打开工作簿

操作工作簿中的工作表

import xlwings as xw

#批量重命名一个工作簿中的所有工作表
def demo_Func3():
    app = xw.App(visible=True, add_book=False)
    workbook=app.books.open('C:\\Users\\14486\\Desktop\\测试文件\\左\\新建工作簿.xlsx')
    worksheets=workbook.sheets #获取工作簿中所有工作表
    for i in range(len(worksheets)):
        worksheets[i].name=worksheets[i].name.replace('销售','')
    workbook.save('C:\\Users\\14486\\Desktop\\测试文件\\左\\新建工作簿.xlsx')
    app.quit()

新增工作表

import xlwings as xw
import os

#在多个工作簿中批量新增工作表
def demo_Func4():
    file_path='C:\\Users\\14486\\Desktop\\测试文件\\左'
    file_list=os.listdir(file_path)
    sheet_name='产品销售区域'#新增的工作表名称
    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)
        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()

删除工作表

for j in workbook.sheets:
    if j.name==sheet_name:
    	j.delete()
    	break

打印工作簿

workbook.api.PrintOut()#打印工作簿

打印工作表

for j in workbook.sheets:
  if j.name==sheet_name:
    j.api.PrintOut()#打印工作表
    break

 复制工作簿1中的工作表到工作簿2中

for j in workbook1.sheets:
    contents=j.range('A1').expand('table').value#读取来源工作簿中要复制的工作表数据
    #expand用于选择扩展范围  默认值是table表示向整个数据表扩展   down向表的下方扩展    right向表的右边扩展
    name=j.name#获取来源工作簿中的工作表的名称
    workbook2.sheets.add(name=name,after=len(workbook.sheets))#在目标工作簿中新增同名工作表
    workbook2.sheets[name].range('A1').value=contents#数据写入

将一个工作表拆分为多个工作表

#将一个工作表拆分为多个工作表
def demo_Func5():
    app=xw.App(visible=True,add_book=False)
    workbook=app.books.open('C:\\Users\\14486\\Desktop\\测试文件\\左\\新建工作簿.xlsx')
    worksheet=workbook.sheets['统计表']
    value=worksheet.range('A1').options(pd.DataFrame,header=1,index=False,expand='table').value  #读取要拆分的工作表数据
    data=value.groupby('产品名称')#将数据按照“产品名称”分组   产品名称x:剩余其它数据
    for idx,group in data:
        new_worksheet=workbook.sheets.add(idx)#在工作簿中新增工作表并命名为当前的产品名称
        new_worksheet['A1'].options(index=False).value=group #将数据添加到新增的工作表
    workbook.save()
    workbook.close()
    app.quit()
posted @ 2021-10-14 17:58  胸前小红花  阅读(136)  评论(0)    收藏  举报