当前位置: 首页 > java >正文

合并多个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()
http://www.xdnf.cn/news/3090.html

相关文章:

  • PostgreSQL Patroni集群组件作用介绍:Patroni、etcd、HAProxy、Keepalived、Watchdog
  • SpringBoot+EasyExcel+Mybatis+H2实现导入
  • 力扣面试150题--删除排序链表中的重复元素 II
  • 4.29[Q]NLP-Exp2
  • uni-app - 小程序使用高德地图完整版
  • Snap7西门子PLC通信协议
  • 【Python魔法方法(特殊方法)】
  • VSCode Verilog编辑仿真环境搭建
  • 松灵PiPER强势突围,攻克具身智能“数据壁垒”
  • [逆向工程]深入理解计算机中的“栈”
  • 内容/社区APP增长:用Deeplink让用户分享的内容“一键直达”
  • 4.2.4 MYSQL的缓存策略
  • C++中vector的扩容过程是怎样的?
  • ARP渗透学习1
  • 农村供水智能化远程监控解决方案
  • std::optional 类是个啥?
  • esp32将partitions.csv文件启用到工程项目中的配置
  • antd pro4 升级 antd5
  • 深入解析:实现一个详细的日志过滤器(LogFilter)
  • 2025年渗透测试面试题总结-拷打题库25(题目+回答)
  • 30天通过软考高项-第一天
  • 刀客doc:小红书商业技术负责人苍响离职
  • 信息系统项目管理师——第10章 项目进度管理 笔记
  • 解决Ollama run qwen3:32b: Error: unable to load model问题
  • 阵列麦克风降噪原理
  • 记录一个单独读取evt.bdf的方法
  • 头歌java课程实验(文件操作)
  • 【CF】Day46——Codeforces Round 967 (Div. 2) B
  • 2025年高级Java后端面试题:最新技术体系深度解析
  • java发送邮件