合并多个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()
相关推荐
DevOpenClub6 分钟前
职教高考及高职分类招生控制线 API 接口
java·数据库·高考
xfddlm7 分钟前
在Windows上配置Claude Code
windows
funnycoffee1238 分钟前
华为S5736交换机3层ECMP负载方式
linux·服务器·数据库
添砖java‘’8 分钟前
MySQL复合查询
数据库·mysql
星川水月10 分钟前
Access数据库快速入门——外部数据导入和SQL简单查询
数据库·sql·access
AI行业学习14 分钟前
Notepad++ 下载+安装+插件集合 完整教程(Windows,安全无捆绑)
windows·notepad++
清平乐的技术专栏27 分钟前
一文读懂Kafka中的“消费”(对标MySQL数据库)
数据库·mysql·kafka
i220818 Faiz Ul28 分钟前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台
IT策士35 分钟前
Django 从 0 到 1 打造完整电商平台:登录与登出功能实现
数据库·django·sqlite
程序边界41 分钟前
标量子查询消除与向量化:一个被低估的协同效应
数据库