Python自动化批量处理Excel工作簿与工作表实战指南

Theo
Theo
发布时间:2026-10-14| 6人浏览过
原创

本文详细介绍如何利用Python的xlwings库实现Excel工作簿与工作表的批量自动化处理。内容涵盖批量新建与保存工作簿、遍历文件夹打开所有Excel文件、批量重命名工作表与工作簿、在多个工作簿中新增或删除指定工作表、批量打印指定工作表,以及复杂的数据赋值、拆分与合并操作。通过具体代码示例,帮助开发者高效处理大量Excel数据任务。

本节介绍如何批量创建并保存Excel工作簿。首先导入xlwings库,启动Excel应用程序实例,设置不自动新建工作簿。接着通过循环6次,每次新建一个工作簿,将其保存至指定路径(如e:\\file\\test0.xlsx至test5.xlsx),随后关闭当前工作簿。循环结束后,退出Excel程序以释放资源。


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程序

本节讲解如何批量打开指定文件夹下的所有Excel工作簿。首先定义目标文件夹路径,并使用os模块列出该文件夹下所有文件和子文件夹的名称。接着启动Excel应用程序实例,遍历文件列表,通过判断文件扩展名是否为.xlsx来筛选出Excel文件,并依次打开这些工作簿。

此部分展示了如何列出文件夹下所有文件和子文件夹的名称。通过定义文件路径,使用os.listdir()函数获取该路径下的所有条目,并遍历打印每个条目的名称,以便后续进行文件处理或筛选。


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)    # 打开工作簿

此代码片段演示了如何列出指定文件夹下的所有文件和子文件夹名称。首先设定文件路径,利用os.listdir()获取目录内容,并通过循环遍历打印每个文件或文件夹的名称,为后续的文件操作提供基础数据。


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

本节介绍如何批量重命名一个工作簿中的所有工作表。首先启动Excel程序(设置为不可见),打开目标工作簿,获取所有工作表的列表。接着遍历每个工作表,使用字符串替换方法将原名称中的特定关键字(如“销售”)移除或替换,然后保存重命名后的工作簿,最后退出Excel程序。

此部分演示如何批量重命名工作簿中的所有工作表。通过打开目标Excel文件,获取其所有工作表,遍历每个工作表并使用replace方法修改其名称(例如移除“销售”字样),保存修改后的工作簿,并退出Excel程序。


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

本节讲解如何批量重命名工作簿中的部分工作表。在打开目标工作簿并获取所有工作表后,通过切片操作选取前5个工作表(或指定范围),对选中的工作表进行名称替换(如移除“销售”),保存工作簿后退出Excel程序。这种方法允许对特定工作表进行批量修改。


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

本节介绍如何批量重命名多个工作簿。首先定义目标文件夹路径,列出所有文件。设定旧关键字和新关键字,遍历文件列表,跳过以“~$”开头的临时文件。对于每个Excel文件,使用字符串替换生成新的文件名,构造新旧文件的完整路径,最后使用os.rename()执行重命名操作。

此部分展示了如何批量重命名多个工作簿。通过指定文件夹路径和文件名列表,设定需要替换的旧关键字及新关键字。遍历文件,跳过临时文件,对每个Excel文件执行文件名替换,构造新旧路径并调用os.rename()完成批量重命名。


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

本节讲解如何批量重命名多个工作簿中的同名工作表。首先获取目标文件夹下的所有文件列表,设定需要修改的工作表名称和新的工作表名称。遍历每个Excel文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则将其重命名为新名称,保存工作簿后继续处理下一个文件,最后退出Excel程序。


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

本节介绍如何在多个工作簿中批量新增或删除工作表。首先获取目标文件夹下的所有Excel文件列表,设定要新增的工作表名称。遍历每个文件,跳过临时文件,打开工作簿后检查该工作表是否已存在。若不存在,则新增该工作表并保存;若存在,则跳过。最后退出Excel程序。

此部分演示如何批量新增工作表。通过指定文件夹路径和文件列表,设定新增工作表的名称。遍历每个Excel文件,跳过临时文件,打开工作簿后检查该工作表是否存在。若不存在,则新增该工作表并保存文件,最后退出Excel程序。


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

本节讲解如何批量删除工作表。首先获取目标文件夹下的所有Excel文件列表,设定要删除的工作表名称。遍历每个文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则删除该工作表并保存文件,最后退出Excel程序。


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

此代码片段展示了如何批量删除工作表。通过指定文件夹路径和文件列表,设定要删除的工作表名称。遍历每个Excel文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则删除该工作表并保存文件,最后退出Excel程序。

本节介绍如何批量打印工作簿。首先获取目标文件夹下的所有Excel文件列表,遍历每个文件,跳过临时文件,打开工作簿后调用PrintOut()方法打印整个工作簿,最后退出Excel程序。


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

此部分讲解如何批量打印多个工作簿中的指定工作表。首先获取目标文件夹下的所有Excel文件列表,设定要打印的工作表名称。遍历每个文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则调用PrintOut()方法打印该工作表并跳出当前工作簿的循环,最后退出Excel程序。


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程序

本节介绍如何将一个工作簿的所有工作表批量赋值到其他工作簿。首先打开源工作簿,获取其所有工作表。接着遍历目标文件夹下的所有Excel文件,打开每个目标工作簿,遍历源工作表的每个工作表,读取其数据,并在目标工作簿中新增同名工作表,将源数据写入目标工作表,保存目标工作簿,最后退出Excel程序。

此部分演示如何将一个工作簿的所有工作表批量赋值到其他工作簿。通过打开源工作簿并获取其所有工作表,遍历目标文件夹下的所有Excel文件,打开每个目标工作簿,遍历源工作表的每个工作表,读取其数据,并在目标工作簿中新增同名工作表,将源数据写入目标工作表,保存目标工作簿,最后退出Excel程序。


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

本节讲解如何将指定工作表的数据批量复制到其他工作簿的指定工作表中。首先打开源工作簿,选中指定的工作表并读取其数据。接着遍历目标文件夹下的所有Excel文件,打开每个目标工作簿,遍历其所有工作表。若发现工作表名称与目标名称一致,则读取源数据并写入目标工作表的指定单元格区域,保存目标工作簿,最后退出Excel程序。


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

本节介绍如何按条件将一个工作表批量赋值到其他工作簿。首先打开源工作簿,获取其所有工作表。接着遍历目标文件夹下的所有Excel文件,打开每个目标工作簿,遍历源工作表的每个工作表,读取其数据,并在目标工作簿中新增同名工作表,将源数据写入目标工作表,保存目标工作簿,最后退出Excel程序。

此部分讲解如何将多个工作表拆分为多个工作簿。通过遍历源工作簿的每个工作表,将每个工作表的数据保存为一个新的Excel文件,实现工作表到工作簿的拆分。


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

本节介绍如何按条件将一个工作表拆分为多个工作表。通过遍历源工作表的每一行数据,根据特定条件(如某列的值)将数据筛选出来,并写入新的工作表中,实现按条件的拆分。


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

此部分讲解如何按条件将一个工作表拆分为多个工作簿。通过遍历源工作表的每一行数据,根据特定条件(如某列的值)将数据筛选出来,并保存为新的Excel文件,实现按条件的拆分。


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

本节介绍如何批量合并多个工作簿中的同名工作表。首先获取目标文件夹下的所有Excel文件列表,设定要合并的工作表名称。遍历每个文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则读取该工作表的数据,并追加到结果工作表中,最后保存合并后的工作簿。

此部分演示如何批量合并多个工作簿中的同名工作表。通过指定文件夹路径和文件列表,设定要合并的工作表名称。遍历每个Excel文件,跳过临时文件,打开工作簿后遍历其所有工作表。若发现工作表名称与目标名称一致,则读取该工作表的数据,并追加到结果工作表中,最后保存合并后的工作簿。


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

本节讲解如何将工作簿中名称有规律的工作表合并到一个工作表。通过遍历源工作簿的每个工作表,根据工作表名称的规律(如前缀或后缀)筛选出需要合并的工作表,读取其数据,并追加到结果工作表中,最后保存合并后的工作簿。


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处理Excel的相关内容,欢迎查阅本站其他文章或继续浏览后续内容。感谢您的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。