作品介绍
作品名称:自动将工作簿下的所有工作表合并到新工作表
开发环境:PyCharm 2023.3.4 + python3.7
用到的库:os、xlwings
作品简介:该实例使用xlwings库来操作Excel文件,其主要功能是将一个工作簿中所有工作表的数据合并到一个新的工作表中。
注意:运行之前,最好先备份文件,避免偶发性的异常导致文件损坏。
实现过程
一、代码设计
以下是代码的详细说明:
- 导入模块:
-
os
:用于操作文件和目录。 -
xlwings
:用于与Excel交互的库。
- 定义
summary
函数:
-
参数
src
:要处理的Excel文件的路径。 -
参数
name
:新工作表的名称,用于存放合并后的数据。
- 文件存在性检查:
- 使用
os.path.exists(src)
检查源文件是否存在,如果不存在则打印错误信息并返回。
- 打开Excel工作簿:
- 使用
xw.Book(src)
打开指定路径的Excel文件。
- 检查并创建新工作表:
-
检查
name
是否已存在于工作簿的工作表中,如果存在则删除旧的工作表。 -
使用
wb.sheets.add(name=name)
添加一个新的工作表。
- 合并数据:
-
遍历工作簿中的所有工作表。
-
如果工作表名称不是
name
,则将数据复制到新工作表。 -
首先复制标题行(如果
title_copy
为False
),然后复制其余数据。 -
使用
current_region
获取当前工作表的活动区域,并使用offset
方法来确定复制数据的目的地。
- 自动调整列宽:
- 调用
new_sheet.autofit()
自动调整新工作表的列宽以适应内容。
- 保存和退出:
-
保存工作簿,但未指定保存路径,这意味着它将覆盖原始文件。
-
关闭Excel应用程序。
- 打印完成信息:
- 打印一条消息,告知用户合并操作已完成。
- 设置源文件路径和新工作表名称:
-
src_path
:设置为'./采购表/采购表.xlsx'
,这是要处理的Excel文件的路径。 -
new_name
:设置为'汇总表'
,这是新工作表的名称。
- 调用函数:
- 调用
summary(src_path, new_name)
执行合并操作。
import os
import xlwings as xw
def summary(src, name):
"""
将工作簿的所有工作表合并到一个工作表
:param src: 要处理的Excel文件路径
:param name: 新工作表名
"""
if not os.path.exists(src):
print('文件路径不正确,请检查')
return
# 打开Excel应用和工作簿,新建一个工作簿对象
wb = xw.Book(src)
# 创建一个新的工作表来存放合并后的数据
if name in [sheet.name for sheet in wb.sheets]:
# 如果新工作表名已存在,则先删除旧的同名工作表
wb.sheets[name].delete()
new_sheet = wb.sheets.add(name=name)
title_copy = False # 是否复制标题栏
# 合并所有工作表的数据到新的工作表
for sheet in wb.sheets:
# 跳过合并的目标工作表,避免重复数据
if sheet.name == name:
continue
if not title_copy:
sheet['A1'].api.EntireRow.Copy(Destination=new_sheet["A1"].api)
title_copy = True
row_num = new_sheet['A1'].current_region.last_cell.row
sheet['A1'].current_region.offset(1, 0).api.Copy(Destination=new_sheet["A{}".format(row_num + 1)].api)
new_sheet.autofit()
# 保存工作簿
wb.save()
wb.app.quit()
print("合并完成,数据已保存到新工作表中!")
src_path = './采购表/采购表.xlsx'
new_name = '汇总表'
summary(src_path, new_name)