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


Posted in Python onJune 03, 2021

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

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

到此这篇关于Python自动化之批量处理工作簿和工作表的文章就介绍到这了,更多相关Python处理工作簿和工作表内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
python:print格式化输出到文件的实例
May 14 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
如何验证python安装成功
Jul 06 Python
Python中logger日志模块详解
Aug 04 Python
Pycharm中如何关掉python console
Oct 27 Python
利用python进行文件操作
Dec 04 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 Python
Python 求向量的余弦值操作
Mar 04 Python
python实现Thrift服务端的方法
Apr 20 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
详解Python生成器和基于生成器的协程
实例讲解Python中sys.argv[]的用法
Jun 03 #Python
You might like
php学习之 认清变量的作用范围
2010/01/26 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Python生成器generator用法示例
2018/08/10 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
安全生产标语
2014/06/06 职场文书
整改报告格式
2014/11/06 职场文书
企业整改报告范文
2014/11/08 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android