合并多个Excel文件到一个文件,并保留格式

合并多个Excel文件到一个文件,并保留格式

需求介绍

假设目前存在多个Excel文件,文件名如:A01.xlsx,A02.xlsx,A03.xlsx,A04.xlsx,

现在需要将A01.xlsx中的表单Sheet1,合并到合并后文件.xlsx中的A1表单中,

A02.xlsx中的表单Sheet1,合并到合并后文件.xlsx中的A2表单中,以此类推。

第一步:创建目标文件

python 复制代码
def creat_new_excel(file_path):
    # 创建一个新的Excel文件
    content_list = []
    df = pd.DataFrame(content_list)
    df.to_excel(file_path, sheet_name="测试")  # 设置统一的表单名称,便于后期统一删除
     
    return

target_file = r"D:\任务\pythonProject\汇总后文件.xlsx"  

creat_new_excel(target_file) # 创建目标文件

第二步:创建任务列表

python 复制代码
def source_file():
    # 文件路径,文件名称及后缀
    source_file_list = [
        [r"D:\任务\pythonProject\A\A01.xlsx", "A01.xlsx"],   
        [r"D:\任务\pythonProject\A\A02.xlsx", "A02.xlsx"],
        [r"D:\任务\pythonProject\A\A03.xlsx", "A03.xlsx"],
    ]
    return source_file_list

第三步:合并文件

python 复制代码
def target(target_file):
    destWorkbook = Workbook()
    destWorkbook.LoadFromFile(target_file)
    
    return destWorkbook


def get_source_sheet(destWorkbook,source_file_path,source_file_name):
    sourceWorkbook = Workbook()
    sourceWorkbook.LoadFromFile(source_file_path)
    
    # 复制之后的sheet名
    sourceSheet = sourceWorkbook.Worksheets[0]  # 子文件中的第一个Sheet,可以根据需求进行调整
    sheetName = source_file_name[:-5]
    destSheet = destWorkbook.Worksheets.Add(sheetName)
    
    # 复制
    destSheet.CopyFrom(sourceSheet)
    destWorkbook.CopyTheme(sourceWorkbook)
    sourceWorkbook.Dispose()
    
    return destWorkbook

for source in source_file():
        destWorkbook = get_source_sheet(target(target_file),source[0],source[1])
        
        # 保存,根据Excel版本不同
        destWorkbook.SaveToFile(target_file, ExcelVersion.Version2016)
        
        # 释放
        destWorkbook.Dispose()

第四步:处理合并后的文件之调用程序打开并保存一次之前生成的Excel文件

这一步的原因是,openpyxl不能直接读取通过Python生成的xlsx文件

解决方式有两种:

  • 一是手动打开文件并保存
  • 二是通过程序进行打开并保存
python 复制代码
def just_open(filename):
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()
    xlApp.Quit()
    del xlApp

第五步:处理合并后的文件之删除合并后文件的无用表单

python 复制代码
def deal_file(filename):
    # import openpyxl
    
    # 加载Excel文件
    wb = load_workbook(filename=filename, read_only=False)
    # print(wb.sheetnames)
    wb.remove(wb["测试"])  # 移除,新建Excel文件的时候,生成的表单
    wb.remove(wb["Evaluation Warning"])  # 移除,使用spire.xls模块生成的表单
    wb.save(filename)

完整代码

python 复制代码
from spire.xls import Workbook, ExcelVersion  # pip install spire.xls
from win32com.client import Dispatch
from openpyxl import load_workbook  # pip install openpyxl
import pandas as pd
import os


def creat_new_excel(file_path):
    # 创建一个新的Excel文件
    content_list = []
    df = pd.DataFrame(content_list)
    df.to_excel(file_path, sheet_name="测试")  # 设置统一的表单名称,便于后期统一删除
     
    return



def source_file():
    
    source_file_list = [
        [r"D:\任务\pythonProject\A\A01.xlsx", "A01.xlsx"],   # 文件路径,文件名称及后缀
        [r"D:\任务\pythonProject\A\A02.xlsx", "A02.xlsx"],
        [r"D:\任务\pythonProject\A\A03.xlsx", "A03.xlsx"],
    ]
    return source_file_list



def deal_file(filename):
    # import openpyxl
    
    # 加载Excel文件
    wb = load_workbook(filename=filename, read_only=False)
    # print(wb.sheetnames)
    wb.remove(wb["测试"])  # 移除,新建Excel文件的时候,生成的表单
    wb.remove(wb["Evaluation Warning"])  # 移除,使用spire.xls模块生成的表单
    wb.save(filename)


def target(target_file):
    destWorkbook = Workbook()
    destWorkbook.LoadFromFile(target_file)
    
    return destWorkbook


def get_source_sheet(destWorkbook,source_file_path,source_file_name):
    sourceWorkbook = Workbook()
    sourceWorkbook.LoadFromFile(source_file_path)
    
    # 复制之后的sheet名
    sourceSheet = sourceWorkbook.Worksheets[0]  # 子文件中的第一个Sheet,可以根据需求进行调整
    sheetName = source_file_name[:-5]
    destSheet = destWorkbook.Worksheets.Add(sheetName)
    
    # 复制
    destSheet.CopyFrom(sourceSheet)
    destWorkbook.CopyTheme(sourceWorkbook)
    sourceWorkbook.Dispose()
    
    return destWorkbook


def just_open(filename):
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()
    xlApp.Quit()
    del xlApp


def run():
    
    target_file = r"D:\任务\pythonProject\汇总后文件.xlsx"  

    creat_new_excel(target_file) # 创建目标文件
    
    
    
    for source in source_file():
        destWorkbook = get_source_sheet(target(target_file),source[0],source[1])
        
        # 保存,根据Excel版本不同
        destWorkbook.SaveToFile(target_file, ExcelVersion.Version2016)
        
        # 释放
        # sourceWorkbook.Dispose()
        destWorkbook.Dispose()

        # 删除表
        just_open(target_file)  
        deal_file(target_file)
        
        print(target_file)


if __name__ == '__main__':
    run()
相关推荐
全栈老石4 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
阿白的白日梦6 小时前
winget基础管理---更新/修改源为国内源
windows
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
埃博拉酱4 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
唐宋元明清21885 天前
.NET 本地Db数据库-技术方案选型
windows·c#
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql