合并多个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()
相关推荐
露天赏雪18 分钟前
JDK8 的入门避坑指南
java·服务器·windows·spring boot·后端·spring·性能优化
大模型玩家七七24 分钟前
安全对齐不是消灭风险,而是重新分配风险
android·java·数据库·人工智能·深度学习·安全
李少兄25 分钟前
MySQL 中为时间字段设置默认当前时间
android·数据库·mysql
码海踏浪34 分钟前
从简单到专业在OceanBase中查看SQL是否走索引
数据库·sql·oceanbase
qinyia35 分钟前
**使用AI助手在智慧运维中快速定位并修复服务异常:以Nginx配置错误导致502错误为例**
linux·运维·服务器·数据库·mysql·nginx·自动化
熊文豪41 分钟前
关系数据库替换用金仓——Oracle兼容性深度解析
数据库·oracle·金仓数据库·电科金仓·kes
仗剑天涯 回首枉然44 分钟前
Linux 和 windows 共享文件
linux·运维·windows
eWidget1 小时前
面向Oracle生态的国产高兼容数据库解决方案
数据库·oracle·kingbase·数据库平替用金仓·金仓数据库
良逍Ai出海1 小时前
在 Windows & macOS 上安装 Claude Code,并使用第三方 Key 的完整教程
windows·macos
404Clukay1 小时前
Windows Server 配置 Let‘s Encrypt 免费 HTTPS 证书(WACS + Nginx 自动化方案)
windows·nginx·https