合并多个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()
相关推荐
2601_962066495 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
愤怒的苹果ext5 小时前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh
数字新视界7 小时前
DCIM管理系统的技术架构与部署模式详解
数据库·物联网·数据中心·数据中心基础设施管理·dcim管理系统
何以解忧,唯有..7 小时前
Pydantic 介绍与使用:Python 数据校验的现代方案
数据库·python·microsoft
这个DBA有点耶8 小时前
数据库容灾进入“秒级时代”:同城双活架构原理、关键技术选型与落地实践
数据库·架构·dba
2601_962074819 小时前
大数据-264 实时数仓 - Canal MySQL的binlog研究 存储目录 变动信息 配置MySQL
大数据·数据库·mysql
2601_962073819 小时前
大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
大数据·数据库·mysql
Frank_refuel10 小时前
【MYSQL进阶】-> 索引理解
数据库
lv__pf10 小时前
MVCC机制【TL mysql7】
数据库
2601_9623818610 小时前
Python办公联动:Excel数据一键自动生成PPT图表
python·数据分析·自动化·excel·ppt