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

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自动化之批量处理工作簿和工作表的更多相关文章

  1. python 窃取摄像头照片的实现示例

    python窃取摄像头照片源码+获取授权码方法+py打包成exe教你用python做一个属于自己的窃取摄像头照片的软件。需要安装python3.5以上版本,在官网下载即可。然后安装库opencv-python,安装方式为打开终端输入命令行。可以在使用pip的时候加参数-i http://pypi.t......

  2. python将原图裁剪为固定尺寸小图

    python实现原图裁剪为固定尺寸小图的具体代码,供大家参考,具体内容如下讲解1、代码效果:实现原图裁剪为固定尺寸小图代码import numpy as npimport pandas as pdimport osimport torch as timport torchvision.transfo......

  3. Python爬虫-抓取手机APP数据

    抓取超级课程表话题数据。博文:http://my.oschina.net/jhao104/blog/606922#!/usr/local/bin/python2.7# -*- coding: utf8 -*-"""超级课程表话题抓取"""i......

  4. Python学习(4)( If 判断语句 、逻辑运算、elif、if嵌套、随机数、石头剪刀布程序)

    Python学习(4)一、python的 if 判断语句二、python的逻辑运算1. and2. or3. not三、python的 elif 判断语句四、python的if 嵌套五、随机数的处理六、石头剪刀布 ---演练一、python的 if 判断语句在python 中,if 语句 就是用来进......

  5. python 进制转换 int、bin、oct、hex

    原理十进制转n进制都可以使用倒除法:对十进制进行除n的运算,直到商为0为止,然后将各个步骤中得到的余数倒着写出来.n进制转十进制:(例子:二进制转十进制)101001 => 2^5 + 2^3 + 1 = 32 + 8 + 1 = 4110111 => 2^4 + 2^2 + 2 + 1......

  6. 如何用python插入声明

    想必写毕设的时候,大家都会遇到一个问题,那就是得在明评版的论文里面插入一个独创性声明。就因为这个事情,我折腾了好久,各种在线网站都试过了,然而基本都需要充值或者会员啥的。(小声嚷嚷:“万恶的资本”)害~一不做二不休,我干脆自己写个小工具好了。一、代码分析利用PyPDF2库便可轻松地对PDF文件进行处......

  7. Python PyQt5中弹出子窗口解决子窗口一闪而过的问题

    方式一:槽函数中创建子窗口对象,赋值到普通变量在主窗口添加按钮,并把按钮信号关联槽,在槽函数中创建子窗口对象赋值到普通变量,并调用其 show 方法。from PyQt5.QtWidgets import *import sysclass Main(QMainWindow):def __init......

  8. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 。也称为 Rosenbrock 山谷或 Rosenbrock 香蕉函数,也简称为香蕉函数。Rosenbrock ......

  9. Python骚操作从列表推导和生成器表达式开始

    序列序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列。容器序列与扁平序列容器序列存放的是对象的引用,包括list、tuple、collections.deque。扁平序列存放的是对象的值,包括str、bytes、bytearray、memoryview和arr......

  10. Python opencv操作深入详解

    直接读取图片def display_img(file="p.jpeg"):img = cv.imread(file)print (img.shape)cv.imshow('image',img)cv.waitKey(0)cv.destroyAllWindows()读取灰度图片de......

随机推荐

  1. C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例)

    本文主要介绍了C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例),分享给大家,具体如下:实现效果:通过StatusStrip显示窗体状态栏,同时将状态栏分成三部分:居左边显示相关文字信息及时间信息,中间操作系统登录名,居右边显示本地IP。步骤:1.创建窗体及添加Sta......

  2. python如何实现单向链表及单向链表的反转

    链表的定义链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息单向链表的实现class ListNode:def __init__(self, val):self.val = valself.next = None要实现单向链表只需要把几个节点关联起来就可以了,把一......

  3. c# WPF中自定义加载时实现带动画效果的Form和FormItem

    背景今天我们来谈一下我们自定义的一组WPF控件Form和FormItem,然后看一下如何自定义一组完整地组合WPF控件,在我们很多界面显示的时候我们需要同时显示文本、图片并且我们需要将这些按照特定的顺序整齐的排列在一起,这样的操作当然通过定义Grid和StackPanel然后组合在一起当然也是可以的......

  4. SpringBoot + 微信公众号JSAPI支付功能的实现

    1、pom.xml依赖配置<!-- 微信支付 --><dependency><groupId>com.egzosn</groupId><artifactId>pay-java-wx</artifactId><version......

  5. Linux磁盘空间释放问题整理

    IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),于是在跟有关同事确认后rm -f果断删除该文件。但是发现删除该文件后,/分区的磁盘空间压根没有释放出来,使用率还是100%!这是为什么呢??[root@linux-node1 ~]# df -hFilesys......

  6. 深度学习tensorflow基础mnist

    软件架构mnist数据集的识别使用了两个非常小的网络来实现,第一个是最简单的全连接网络,第二个是卷积网络,mnist数据集是入门数据集,所以不需要进行图像增强,或者用生成器读入内存,直接使用简单的fit()命令就可以一次性训练安装教程使用到的主要第三方库有tensorflow1.x,基于Tensor......

  7. 如何在 Vue 表单中处理图片

    问题:我在 Vue 中有一个 form 表单,用于上传博客帖子,它有标题、正文、描述、片段和图片等范围。所有的一切都是必需的。我在 Express 中设置了一个 API 来处理这个问题。我在 Postman 中测试正常,但是我不知道如何通过浏览器将文件发送给数据库。我一直收到 500 错误,并且我将......

  8. R语言数据重塑知识点总结

    R 语言中的数据重塑是关于改变数据被组织成行和列的方式。 大多数时间 R 语言中的数据处理是通过将输入数据作为数据帧来完成的。 很容易从数据帧的行和列中提取数据,但是在某些情况下,我们需要的数据帧格式与我们接收数据帧的格式不同。 R 语言具有许多功能,在数据帧中拆分,合并和将行更改为列,反之亦然。于......

  9. 详解MySQL与Spring的自动提交(autocommit)

    1 MySQL的autocommit设置MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交。如果修改为关闭状态,则执行DML语句之后要手动提交 才能生效。查询当前会话的自动提交是否开启:mysql> show variables like 'aut......

  10. 使用JS调用WebService接口

    <> $(document).ready(function () { var username = "admin"; var password = "123456";       /*==J......