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中的socket模块使用代理实例
May 29 Python
pyhton列表转换为数组的实例
Apr 04 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Python中判断输入是否为数字的实现代码
May 26 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Python中Numpy ndarray的使用详解
May 24 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python获取Pandas列名的几种方法
Aug 07 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 Python
在Python中如何使用yield
Jun 07 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 Python
python数字图像处理:图像的绘制
Jun 28 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 连接mysql连接被重置的解决方法
2011/02/15 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
企业节能减排实施方案
2014/03/19 职场文书
党员创先争优承诺书
2014/03/26 职场文书
高中军训的心得体会
2014/09/01 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
关于运动会的广播稿
2015/08/19 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
python实现进度条的多种实现
2021/04/29 Python