资讯专栏INFORMATION COLUMN

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

maxmin / 2242人阅读

摘要:使用批量处理工作簿和工作表批量新建并保存工作簿批量打开一个文件夹中的打开工作簿批量重命名一个工作簿的所有工作表批量重命名多个工作簿批量重命名多个工作簿中的同名工作表将一个工作簿的所有工作表批量复制到其他工作簿按条件将一

批量新建并保存工作簿

代码

import xlwings as xw# 启动 Excel,但不新建工作簿app = xw.App(visible=True,add_book=False)for i in range(5):	#新建工作簿    workbook = app.books.add()    #保存工作簿    workbook.save(f"test{i}.xlsx")    #将工作簿关闭    workbook.close()

批量打开一个文件夹中的打开工作簿

import xlwings as xwimport os# 给出工作簿所在的文件夹路径path_file = r"E:/python1/python_module"# 列出该文件夹中所有的子文件或子文件夹file_list = os.listdir(path_file)# 启动Excelapp = xw.App(visible=True,add_book=False)for i in file_list:    # 判断文件是否为 Excel文件    if os.path.splitext(i)[1] ==".xlsx":        #打开        app.books.open(i)

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

import xlwings as xw# 启动Excelapp = xw.App(visible=True,add_book=False)# 打开工作簿workbook = app.books.open("table.xlsx")#获取工作簿的所有工作表worhsheets = workbook.sheetsfor i in range(len(worhsheets)):    # 重命名工作表    worhsheets[i].name = worhsheets[i].name.replace("销售","")#另存重命名后的工作簿workbook.save("table1.xlsx")#退出Excel程序app.quit()

批量重命名多个工作簿

不过这是有前提条件的,要重命名的工作簿名必
须是有规律的,如表1、表2、表3;或者含有相同的关键字。

import xlwings as xwimport os# 给出工作簿所在的文件夹路径path_file = r"E:/python1/python_module"# 列出该文件夹中所有的子文件或子文件夹file_list = os.listdir(path_file)old_book_name = "销售表"new_book_name = "分部销售表"# 启动Excelapp = xw.App(visible=True,add_book=False)for i in file_list:    if i.startswith("~$"):        continue    # 执行查找和替换,生成新的工作簿名    new_file = i.replace(old_book_name,new_book_name)    # 构造需要重命名工作簿的完整路径    old_path_filr = os.path.join(path_file,i)    #构建重命名后工作簿的完整路径    new_path_file = os.path.join(path_file,new_file)    # 重命名    os.rename(old_path_filr,new_path_file)

if i.startswith(’~$’):
continue

因为Excel会在使用过程中生成一些文件名以"~$"开头的临时文件,如果有这些文件就跳过。

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

步骤

  1. 打印出文件夹中所有子文件的名称
  2. 与文件夹路径拼接成完整的文件名后,打开
  3. 遍历文件中的所有工作表,如果名字相同就更改
  4. 保存工作表目录

代码:

import xlwings as xwimport os# 给出工作簿所在的文件夹路径path_file = r"E:/python1/python_module"# 列出该文件夹中所有的子文件或子文件夹file_list = os.listdir(path_file)old_sheet = "sheet1"new_sheet = "员工信息"app = xw.App(visible=True,add_book= False) # 遍历工作簿for i in path_file:    if i.startswith("~$"):        continue    # 拼接出完整路径    old_path_file = os.path.join(path_file,i)    # 打开工作簿    workbook = app.books.open(old_path_file)    # 遍历工作表    for j in workbook.sheets:        if j.name == old_sheet:            j.name = new_sheet    # 保存工作簿    workbook.save()app.quit()

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

步骤:

  1. 获取目标(复制到的)文件夹的所有子文件
  2. 打开源文件(被复制的),并获取其所有的工作表信息。
  3. 遍历所有的子文件,如果是Excel文件就打开
  4. 在目标工作簿中新增工作表
  5. 将来源工作表的数据写入新增工作表中

代码

import xlwings as xwimport os# 给出工作簿所在的文件夹路径path_file = r"E:/python1/python_module"# 列出该文件夹中所有的子文件或子文件夹file_list = os.listdir(path_file)app = xw.App(visible=True,add_book= False)workbook = app.books.open("来源工作簿路径")worksheet = workbook.sheets # 子文件for i in path_file:    if os.path.splitext(i)[1] ==".xlsx":        # 打开工作簿        workbooks = app.books.open(path_file+"/"+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        # 保存工作簿        workbook.save()app.quit()

.expand()xlwings模块中的函数,用于扩展选择范围。语法格式如下

expand(mode) 默认值是 ‘table’,表示向整个数据表扩展。也可以是’down’(下方)或’right’(右方)

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

import  osimport xlwings as xwfilr_path = "e://table//产品统计表.xlsx"sheet_name = "统计表"app = xw.App(visible = True ,add_book= False)# 打开工作簿workbooh = app.books.open(filr_path)# 获取指定的工作表worksheet = workbooh.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 = app.books.add()    #新建工作表    new_sheet = new_workbook.sheets.add(key)    # 将要拆分的工作表的列标题复制到新建的工作表中    new_sheet["A1"].value = worksheet["A1:H1"].value    # 将数据复制    new_sheet["A2"].value = value    new_workbook.save("{}.xlsx".format(key))app.quit()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119308.html

相关文章

  • 想免费用谷歌资源训练神经网络?Colab 详细使用教程 —— Jinkey 原创

    摘要:网址库的安装和使用自带了等深度学习基础库。遍历目录列出根目录的所有文件查询条件教程详见可以看到控制台打印结果测试其中是接下来的教程获取文件的唯一标识。该示例演示的是对健康科技设计三个类别的标题进行分类。 showImg(https://segmentfault.com/img/remote/1460000012731670); 原文链接 https://jinkey.ai/post/t...

    XboxYan 评论0 收藏0
  • 想免费用谷歌资源训练神经网络?Colab 详细使用教程 —— Jinkey 原创

    摘要:网址库的安装和使用自带了等深度学习基础库。遍历目录列出根目录的所有文件查询条件教程详见可以看到控制台打印结果测试其中是接下来的教程获取文件的唯一标识。该示例演示的是对健康科技设计三个类别的标题进行分类。 showImg(https://segmentfault.com/img/remote/1460000012731670); 原文链接 https://jinkey.ai/post/t...

    nanchen2251 评论0 收藏0
  • 想免费用谷歌资源训练神经网络?Colab 详细使用教程 —— Jinkey 原创

    摘要:网址库的安装和使用自带了等深度学习基础库。遍历目录列出根目录的所有文件查询条件教程详见可以看到控制台打印结果测试其中是接下来的教程获取文件的唯一标识。该示例演示的是对健康科技设计三个类别的标题进行分类。 showImg(https://segmentfault.com/img/remote/1460000012731670); 原文链接 https://jinkey.ai/post/t...

    2i18ns 评论0 收藏0
  • MySQL非主从环境下数据一致性校验及修复程序

    摘要:简介项目地址主从环境下数据一致性校验经常会用工具,它的原理及实施过程之前写过一篇文章生产环境使用检查数据一致性。上面的配置文件可以认为是用于控制程序的,这个配置文件是指定要校验的源库和目标库信息,以及要检验哪些表。 1. 简介 项目地址:https://github.com/seanlook/p... 主从环境下数据一致性校验经常会用 pt-table-checksum 工具,它的原理...

    darkbug 评论0 收藏0
  • MySQL非主从环境下数据一致性校验及修复程序

    摘要:简介项目地址主从环境下数据一致性校验经常会用工具,它的原理及实施过程之前写过一篇文章生产环境使用检查数据一致性。上面的配置文件可以认为是用于控制程序的,这个配置文件是指定要校验的源库和目标库信息,以及要检验哪些表。 1. 简介 项目地址:https://github.com/seanlook/p... 主从环境下数据一致性校验经常会用 pt-table-checksum 工具,它的原理...

    104828720 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<