网络编程
位置:首页>> 网络编程>> Python编程>> Python自动化之批量处理工作簿和工作表

Python自动化之批量处理工作簿和工作表

作者:简时刻  发布时间:2023-02-16 08:07:30 

标签:python,自动化

一、批量新建并保存工作簿


import xlwings as xw     # 导入库
# 启动Excel程序,但不新建工作簿
app = xw.App(visible = True, add_book = False)

for i in range(6):
   workbook = app.books.add()   # 新建工作簿
   workbook.save(f'e:\\file\\test{i}.xlsx')    # 保存新建的多个工作簿
   workbook.close()     # 关闭当前工作簿
app.quit()     # 退出Excel程序

二、批量打开一个文件夹下的所有工作簿

1.批量打开一个文件夹下的所有工作簿


import os
import xlwings as xw

file_path = 'e:\\table'     # 给出工作簿所在的文件夹路径
file_list = os.listdir(file_path)     # 列出路径下所有文件和子文件夹的名称
app = xw.App(visible = True, add_book = False)    # 启动Excel程序
for i in file_list:
   if os.path.splitext(i)[1] == '.xlsx':       # 判断文件夹下文件的扩展名是否为“.xlsx”
       app.books.open(file_path + '\\' + i)    # 打开工作簿

2.列出文件夹下所有文件和子文件夹的名称


import os
file_path = 'table'
file_list = os.listdir(file_path)
for i in file_list:
   print(i)

三、批量重命名一个工作簿中所有工作表

1.批量重命名一个工作簿中的所有工作表


import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('e:\\table\\统计表.xlsx')
worksheets = workbook.sheets     # 获取工作簿中所有的工作表

for i in range(len(worksheets)):   # 遍历获取到的工作表
   worksheets[i].name = worksheets[i].name.replace('销售', '')     # 重命名工作表
workbook.save('e:\\table\\统计表1.xlsx')       # 另存重命名工作表后的工作簿
app.quit()

2.批量重命名一个工作簿中的部分工作表


import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('e:\\table\\统计表.xlsx')
worksheets = workbook.sheets    # 获取工作簿中所有的工作表

for i in range(len(worksheets))[:5]:   # 通过切片来选中部分工作表
   worksheets[i].name = worksheets[i].name.replace('销售', '')   # 重命名工作表
workbook.save('e:\\table\\统计表1.xlsx')    # 另存重命名工作表后的工作簿
app.quit()

四、批量重命名工作簿

1.批量重命名多个工作簿


import os    # 导入库

file_path = 'e:\\table\\产品销售表'   # 给出待重命名工作簿所在文件夹的路径
file_list = os.listdir(file_path)    # 列出文件夹下所有文件和子文件夹的名称

old_book_name = '销售表'           # 给出工作簿名中需要替换的旧关键字
new_book_name = '分部产品销售表'    # 给出工作簿名中要替换的新关键字

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)     # 执行重命名

2.批量重命名多个工作簿中的同名工作表


import os
import xlwings as xw

file_path = 'e:\\table\\信息表'
file_list = os.listdir(file_path)

old_sheet_name = 'Sheet1'    # 给出需要修改的工作表名
new_sheet_name = '员工信息'   # 列出修改后的工作表名

app = xw.App(visible = False, add_book = False)

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()

五、在多个工作簿中批量新增/删除工作表

1.批量新增工作表


import os
import xlwings as xw

file_path = 'e:\\table\\销售表'
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()

2.批量删除工作表


import os
import xlwings as xw

file_path = 'e:\\table\\销售表1'
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)
   for j in workbook.sheets:
       if j.name == sheet_name:
           j.delete()
           break
   workbook.save()
app.quit()

六、批量打印工作簿

1.批量打印工作簿


import os
import xlwings as xw

file_path = 'e:\\table\\公司'
file_list = os.listdir(file_path)
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()   # 打印工作簿
app.quit()

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


import os
import xlwings as xw

file_path = 'e:\\table\\公司1'
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)

for j in workbook.sheets:
       if j.name == sheet_name:     # 判断工作簿中是否存在名为“产品分类表”的工作表
           j.api.PrintOut()    # 如果存在,则打印该表
           break
app.quit()   # 退出Excel程序

七、将一个工作簿的所有工作表批量赋值到其他工作簿

1.将一个工作簿的所有工作表批量赋值到其他工作簿


import os
import xlwings as xw

app = xw.App(visible = False, add_book = False)
file_path = 'e:\\table\\销售表'  
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()

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()

八、按条件将一个工作表批量赋值到其他工作簿

1.将多个工作表拆分为多个工作簿


import xlwings as xw
workbook_name = 'e:\\table\\产品销售表.xlsx'        # 指定要拆分的来源工作簿
app = xw.App(visible = False, add_book = False)

header = None    
all_data = []  
workbook = app.books.open(workbook_name)

for i in workbook.sheets:                 # 遍历来源工作簿中的工作表
   workbook_split = app.books.add()      # 新建一个目标工作簿
   sheet_split = workbook_split.sheets[0]     # 选择目标工作簿中的第一个工作表
   i.api.Copy(Before = sheet_split.api)       # 将来源工作簿中的当前工作表复制到目标工作簿的第一个工作表之前
   workbook_split.save('{}'.format(i.name))   # 以当前工作表的名称作为文件名保存目标工作簿
app.quit()

2.按条件将一个工作表拆分为多个工作表


import xlwings as xw
import pandas as pd
app = xw.App(visible = True, add_book = False)

workbook = app.books.open('e:\\table\\产品统计表.xlsx')
worksheet = workbook.sheets['统计表']
# 读取要拆分的工作表数据
value = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value
data = value.groupby('产品名称')    # 将数据按照“产品名称”分组

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()

3.按条件将一个工作表拆分为多个工作簿


import xlwings as xw

file_path = 'e:\\table\\产品统计表.xlsx'
sheet_name = '统计表'
app = xw.App(visible = True, add_book = False)

workbook = app.books.open(file_path)
worksheet = workbook.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 = xw.books.add()
   new_worksheet = new_workbook.sheets.add(key)
   new_worksheet['A1'].value = worksheet['A1:H1'].value
   new_worksheet['A2'].value = value
   new_workbook.save('{}.xlsx'.format(key))
app.quit()

九、批量合并多个工作簿中的同名工作表

1.批量合并多个工作簿中的同名工作表


import os
import xlwings as xw

file_path = 'e:\\table\\销售统计'
file_list = os.listdir(file_path)
sheet_name = '产品销售统计'
app = xw.App(visible = False, add_book = False)
header = None
all_data = []
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:
           if header == None:
               header = j['A1:I1'].value
           values = j['A2'].expand('table').value
           all_data = all_data + values
new_workbook = xw.Book()
new_worksheet = new_workbook.sheets.add(sheet_name)  
new_worksheet['A1'].value = header
new_worksheet['A2'].value = all_data
new_worksheet.autofit()
new_workbook.save('e:\\table\\上半年产品销售统计表.xlsx')
app.quit()

2.将工作簿中名称有规律的工作表合并到一个工作表


import os
import xlwings as xw
workbook_name = 'e:\\table\\采购表.xlsx'
sheet_names = [str(sheet)+'月' for sheet in range(1,7)]
new_sheet_name = '上半年统计表'
app = xw.App(visible = False, add_book = False)
header = None
all_data = []
workbook = app.books.open(workbook_name)
for i in workbook.sheets:
   if new_sheet_name in i.name:
       i.delete()
new_worksheet = workbook.sheets.add(new_sheet_name)
title_copyed = False
for j in workbook.sheets:
   if j.name in sheet_names:
       if title_copyed == False:
           j['A1'].api.EntireRow.Copy(Destination = new_worksheet["A1"].api)
           title_copyed = True
       row_num = new_worksheet['A1'].current_region.last_cell.row
       j['A1'].current_region.offset(1, 0).api.Copy(Destination = new_worksheet["A{}".format(row_num + 1)].api)
new_worksheet.autofit()
workbook.save()
app.quit()

来源:https://blog.csdn.net/weixin_44940488/article/details/117409356

0
投稿

猜你喜欢

  • 目录什么是引用?引用在数组和对象中的使用引用的传递引用的返回引用的取消总结什么是引用?在 PHP 中引用意味着用不同的名字访问同一个变量内容
  • 此代码适合你做网站用,普通朋友可以不用理这个东西!ASP:<%dim objXMLHTTP, qq, pwd  qq = &
  • 九宫格是一种比较古老的设计,它最基本的表现其实就像是一个三行三列的表格。其实它最初是在window的c/s结构中用得比较多,比如我们经常看到
  • 1 导言 Microsoft 在Microsoft SQL Server 2000中推出了与XML相关的功能以及Transact-SQL 关
  • 经常上网的人一定碰到过找不到页面的情况,此时是否有点让人沮丧呢,本文介绍了一些404页面设计优秀的例子,当我们撞见些好玩可爱的页面时,有时反
  • 本文实例讲述了Python使用matplotlib简单绘图。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#!
  • 注:本文是应Alan邀请为《CSS布局实录》写的一个web标准入门指导。书已经上市近一年了,现在摘选出来,给初学者一个参考。希望了解更多实现
  • 需求说明:通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。有实际需要的还可以将春联打印。实现过程:实现思路是先
  • 使用MySQL进行数据库备份,有很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的
  • 列表的添加1)+ 添加2)append 追加一次只能添加一个元素到列表中,适合用于循环里3)extend 拉伸可一次添加多个元素到列表中4)
  • IP字段截取,判断访问者ip,根据ip来显示不同图片,很简单的程序<%ip=request.servervariables("
  • python使用pandas和xlsxwriter读写xlsx文件已有xlsx文件如下:1. 读取前n行所有数据# coding: utf-
  • 在做我的友情链接批量检查工具过程中,碰到一些情况,就是对方网页会用gzip压缩。用gzip压缩的好处是,能压缩网页大小,加快网页的浏览速度,
  • 本文主要介绍了Python3中PyQt5简单实现文件打开及保存,分享给大家,具体如下:# -*- coding: utf-8 -*-# Fo
  •     在我们制作网页的时候会经常碰到一些需求,如果不知道方法,说不定会困扰我们半天。其实实现它们都很简单,下
  • “没 Javascript 就会死”的页面通常都会加入 noscript 标签用于提示用户开启脚本支持。 然而在 IE8 下,如果在 nos
  • 从AspJpeg1.8 版本开始,AspJpeg 提供了比 PrintText 更为灵活的文本绘图方法PrintTextEx,PrintTe
  • 需要的软件phpStudy 用来导入一个数据库api-server 数据库功能可以开启一个服务器,让开发环境可以使用生产环境的网址请求安装
  • 一个不错的js效果,实现了图片预加载,并实时显示图片加载进度。<script> var l=0; var i
  • 上文:成为一个顶级设计师的第二准则英文原文成为一个顶级设计师的第三准则:对比,对比,对比在设计里面,好的对比和你对颜色选择是密切相关的。对比
手机版 网络编程 asp之家 www.aspxhome.com