欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 合并多个Excel文件到一个文件,并保留格式

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

2025/5/5 14:54:03 来源:https://blog.csdn.net/Yooyi_xin/article/details/147632911  浏览:    关键词:合并多个Excel文件到一个文件,并保留格式

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

  • 需求介绍
  • 第一步:创建目标文件
  • 第二步:创建任务列表
  • 第三步:合并文件
  • 第四步:处理合并后的文件之调用程序打开并保存一次之前生成的Excel文件
  • 第五步:处理合并后的文件之删除合并后文件的无用表单
  • 完整代码

需求介绍

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

现在需要将A01.xlsx中的表单Sheet1,合并到合并后文件.xlsx中的A1表单中,
A02.xlsx中的表单Sheet1,合并到合并后文件.xlsx中的A2表单中,以此类推。

第一步:创建目标文件

def creat_new_excel(file_path):# 创建一个新的Excel文件content_list = []df = pd.DataFrame(content_list)df.to_excel(file_path, sheet_name="测试")  # 设置统一的表单名称,便于后期统一删除returntarget_file = r"D:\任务\pythonProject\汇总后文件.xlsx"  creat_new_excel(target_file) # 创建目标文件

第二步:创建任务列表

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 target(target_file):destWorkbook = Workbook()destWorkbook.LoadFromFile(target_file)return destWorkbookdef 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 destWorkbookfor 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文件
解决方式有两种:

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

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

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)

完整代码

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 osdef creat_new_excel(file_path):# 创建一个新的Excel文件content_list = []df = pd.DataFrame(content_list)df.to_excel(file_path, sheet_name="测试")  # 设置统一的表单名称,便于后期统一删除returndef 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_listdef 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 destWorkbookdef 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 destWorkbookdef just_open(filename):xlApp = Dispatch("Excel.Application")xlApp.Visible = FalsexlBook = xlApp.Workbooks.Open(filename)xlBook.Save()xlBook.Close()xlApp.Quit()del xlAppdef 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()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词