多个excel文件合并为一个excel

Python openpyxl库实现将同一目录下的excel文件合并为一个excel功能(包含格式,不含宏),运行程序后,输入要生成的excel文件名称即可

import os
import copy
import sys
import openpyxl
from openpyxl.utils import get_column_letter
import win32com.client as win32
#功能目标:将同目录下的多个excel合并到同一个excel中,sheet页以excel文件名称+sheet页名称来命名
#-----------------------------
#实现xls文件转化为xlsx文件
#函数名称:xls_to_xlsx(file)
#file  xls文件
#------------------------------------------------------------------------------------------
def xls_to_xlsx(file):excel = win32.gencache.EnsureDispatch('Excel.Application')wb = excel.Workbooks.Open(file)wb.SaveAs(file + 'x', FileFormat=51)  # FileFormat = 51 is for .xlsx extensionwb.Close()  # FileFormat = 56 is for .xls extensionexcel.Application.Quit()
#------------------------------------------------------------------------------------------
#实现不同excel文件的sheet页复制 全格式复制
#函数名称:sheet copy(source excel,target excel)
#source_excel 源excel文件 target_excel 目标excel文件
#将源exce1文件的各个sheet页原样复制到目标excel文件
#------------------------------------------------------------------------------------------
def sheet_copy(source_excel,target_excel):#判断源文件和目标文件是否为excel文件if((source_excel.split('.')[1]!='xls' and source_excel.split('.')[1]!='xlsx') or (target_excel.split('.')[1]!='xls' and target_excel.split('.')[1]!='xlsx')):print('文件类型错误,请输入excel文件类型')sys.exit()source_file_name = source_excel.split('.')[0]wb = openpyxl.load_workbook(source_excel)#判断目标文件是否存在,不存在创建if(os.path.isfile(target_excel) == False):wb2 = openpyxl.Workbook()wb2.save(target_excel)wb2 = openpyxl.load_workbook(target_excel)#获取源文件的sheet页名称 使用文件名+sheet页名作为目标excel文件的sheet页命名sheetnames = wb.sheetnamesfor sheetname in sheetnames:print(sheetname)sheet = wb[sheetname]sheet2 = wb2.create_sheet(source_file_name+'_'+sheetname)# tab颜色sheet2.sheet_properties.tabColor = sheet.sheet_properties.tabColor# 开始处理合并单元格形式为“(<CellRange A1:A4>,),替换掉(<CellRange 和 >,)' 找到合并单元格wm = list(sheet.merged_cells)if len(wm) > 0:for i in range(0, len(wm)):cell2 = str(wm[i]).replace('(<CellRange ', '').replace('>,)', '')sheet2.merge_cells(cell2)for i, row in enumerate(sheet.iter_rows()):sheet2.row_dimensions[i + 1].height = sheet.row_dimensions[i + 1].heightfor j, cell in enumerate(row):sheet2.column_dimensions[get_column_letter(j + 1)].width = sheet.column_dimensions[get_column_letter(j + 1)].widthsheet2.cell(row=i + 1, column=j + 1, value=cell.value)# 设置单元格格式source_cell = sheet.cell(i + 1, j + 1)target_cell = sheet2.cell(i + 1, j + 1)target_cell.fill = copy.copy(source_cell.fill)if source_cell.has_style:target_cell._style = copy.copy(source_cell._style)target_cell.font = copy.copy(source_cell.font)target_cell.border = copy.copy(source_cell.border)target_cell.fill = copy.copy(source_cell.fill)target_cell.number_format = copy.copy(source_cell.number_format)target_cell.protection = copy.copy(source_cell.protection)target_cell.alignment = copy.copy(source_cell.alignment)if 'Sheet' in wb2.sheetnames:del wb2['Sheet']if(source_excel.split('.')[1]=='xls'):os.remove(source_excel+'x')wb2.save(target_excel)wb.close()wb2.close()def main():path = os.getcwd()files = os.listdir(path)if(len(files)==0):sys.exit()excel_list = []for file in files:if(file.split('.')[1]=='xls'):xls_to_xlsx(os.path.join(path,file))files = os.listdir(path)for file in files:if (file.split('.')[1] == 'xlsx'):excel_list.append(file)print(excel_list)file_name = input("请输入最终生成的excel文件名称")oneexcel = openpyxl.Workbook()oneexcel.save(file_name+'.xlsx')for f in excel_list:sheet_copy(f,file_name+'.xlsx')for file in files:if(file.split('.')[1]=='xls'):os.remove(file+'x')if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java工作随笔

String s JSONObject.toJSONString(fixedAsset);logger.error("-----------------8------------------" s);CusFixedAssettDTO CusFixedAssettDTO3 JSONObject.parseObject(s, CusFixedAssettDTO.class);父类转子类 相同对象合并 import java.util.Date; Data T…

Bard:Google AI开始支持中文对话和看图说话了

说起时下火爆的生成式AI&#xff0c;并不是只有ChatGPT。Bard也是一个很优秀的产品&#xff0c;并且刚刚发布的很多有趣的新功能。文末告诉你如何访问Bard。 Google AI在最近的更新中发布了Bard&#xff0c;一个新的语言模型。Bard支持多种语言&#xff0c;包括中文&#xff0…

【Ceph集群应用】Ceph对象存储系统之RGW接口详解

Ceph对象存储系统之RGW接口详解 1.创建Ceph对象存储系统RGW接口2. 开启httphttps,更改监听端口3. 更改监听端口4.S3接口访问测试5.实验中遇到的故障案例 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph对象存储系统RGW接口 &#xff08;1&#xff09;对象存储概念 对象存…

WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

使用Winform控件承载外部程序 在WPF中使用Winfom控件添加winform相关的程序集在XAML头中加入对这两个程序集命名空间的引用使用Winform控件效果&#xff1a;问题 在Winfom控件中嵌入exe程序准备Winfrom控件更换父窗体的句柄完整实现代码&#xff1a;实现效果&#xff1a; 问题和…

ffmpeg get_bits() 函数是如何工作的.

/* * 本测试程序用来说明 GetBitContext 是什么? * get_bits() 函数是如何工作的. * author: hjjdebug * date: 2023年 07月 13日 星期四 16:42:45 CST */ GetBitContext 是如下定义的, 没有什么特别之处,指明了数据指针buffer,size_in_bits. typedef struct GetBi…

perl输出中文乱码【win10】

perl输出中文乱码 运行的时候输出的内容变成了中文乱码&#xff0c;原因首先来查找一下自己的perl的模块里面是否有Encode-CN。请运行打开你的cmd并输入perldoc -l Encode::CN 如果出现了地址 则就是有&#xff0c;如果没有需要进行该模块的安装。 安装方式有很多种&#xff0…

MetaTown:一个可以自己构建数字资产的平台

摘要&#xff1a;华为云Solution as Code重磅推出《基于MetaTown构建数字资产平台》解决方案。 本文分享自华为云社区《基于MetaTown构建数字资产平台》&#xff0c;作者&#xff1a; 阿米托福。 华为云Solution as Code重磅推出《基于MetaTown构建数字资产平台》解决方案&…

“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”

快速排序是一种基于分治思想的排序算法&#xff0c;它能够以极快的速度将一个乱序的数组重新排列成有序的序列。不仅如此&#xff0c;快速排序还具有简洁的实现代码和良好的可扩展性&#xff0c;成为最受欢迎的排序算法之一。接下来&#xff0c;让我带你了解一下它的魅力吧&…

Linux系统部署Nginx详细教程(图文讲解)

前言&#xff1a;本篇博客记录了我是如何使用Linux系统一步一步部署Nginx的完整过程&#xff0c;也是我学习之路上的一个笔记总结&#xff0c;每一行代码都进行了严格的测试&#xff0c;特此做一个技术分享&#xff01; 目录 一、安装依赖 二、安装Nginx 三、配置Nginx 四、…

visio 图片转换到 latex 中

调整图片大小 在Visio中&#xff0c;设计–>页面设置–>大小–>适应绘图&#xff0c;这样会自动去除多余空白&#xff0c;保留部分空白作为边界&#xff0c;无需使用Word。 2. 将新的Visio文件另存为pdf格式文件 3. latex 中插入pdf 格式图片

手把手教你搭建SpringCloud项目(八)集成Ribbon负载均衡器

什么是微服务&#xff1f;一看就会系列&#xff01; 一、手把手教你搭建SpringCloud项目&#xff08;一&#xff09;图文详解&#xff0c;傻瓜式操作 二、手把手教你搭建SpringCloud项目&#xff08;二&#xff09;生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…

【数据结构】24王道考研笔记——图

六、图 目录 六、图定义及基本术语图的定义有向图以及无向图简单图以及多重图度顶点-顶点间关系连通图、强连通图子图连通分量强连通分量生成树生成森林边的权、带权网/图特殊形态的图 图的存储及基本操作邻接矩阵邻接表法十字链表邻接多重表分析对比图的基本操作 图的遍历广度…

区块链学习一:安装 Geth

区块链技术正在迅速发展&#xff0c;并在各个领域展现出巨大的潜力。如果您对区块链开发感兴趣&#xff0c;那么学习如何安装和配置以太坊客户端 Geth 是一个很好的起点。在本篇文章中&#xff0c;我们将介绍如何使用 DockerHub 上的 Geth Docker 映像来快速安装和运行 Geth 节…

vue学习笔记(一)

1.编辑器选择 是用vscode 和 webstrom 个人感觉 vscode的插件比较多&#xff0c;对vue3的支持比较好 webstorm的自动保存比较好 各有优劣吧 我学习的这个项目目前采用vscode 2.vue2 还是 vue3 框架学通了都是通用的&#xff0c;这个时间点来学肯定是学vue3 只是顾虑到团…

JavaScript XHR、Fetch

1 前端数据请求方式 2 Http协议的解析 3 XHR的基本用法 4 XHR的进阶和封装 5 Fetch的使用详解 6 前端文件上传流程 早期的页面都是后端做好&#xff0c;浏览器直接拿到页面展示的&#xff0c;用到的是jsp、asp、php等等的语言。 这个叫做服务器端渲染SSR。 这里后端向前端…

金融数据库的战场,太平洋保险和OceanBase打了场胜仗

点击关注 文丨刘雨琦 “数据库的国产替代&#xff0c;必须经过严格的考虑&#xff0c;保证不会出错&#xff0c;所以大多数企业的领导层选择按兵不动或者简单扩容。因为不换就不会错&#xff0c;选了很久如果选错&#xff0c;还可能会出现重大事故。” 某银行数据库技术人员…

Go语言之函数补充defer语句,递归函数,章节练习

defer语句是go语言提供的一种用于注册延迟调用的机制&#xff0c;是go语言中一种很有用的特性。 defer语句注册了一个函数调用&#xff0c;这个调用会延迟到defer语句所在的函数执行完毕后执行&#xff0c;所谓执行完毕是指该函数执行了return语句、函数体已执行完最后一条语句…

语音识别开源框架 openAI-whisper

Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型&#xff0c;也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…

数据结构问答3

1. 栈、队列、线性表的区别与联系(异同) 答: 栈和队列联系:逻辑结构都是线性结构;存储结构都可以采用顺序存储结构和链式存储结构;他们的数据元素都呈线性关系,是一种的线性表,且只允许在端点处插入和删除元素 栈、队列和线性表联系:栈和队列都是一种操作受限的线性…

netty组件详解-上

netty服务端示例: private void doStart() throws InterruptedException {System.out.println("netty服务已启动");// 线程组EventLoopGroup group new NioEventLoopGroup();try {// 创建服务器端引导类ServerBootstrap server new ServerBootstrap();// 初始化服…