Python使用openpyxl复制整张sheet
作者:d9394952 发布时间:2023-11-21 23:09:18
标签:Python,openpyxl,复制,sheet
通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的:
不能拷贝有合并格式的sheet、没有拷贝cell的相关格式(填充、边框、对齐)等参数
所以通过bing继续发掘,最终合成以下代码:
from copy import copy
from openpyxl import load_workbook, Workbook
def replace_xls(src_file,tag_file,sheet_name):
# src_file是源xlsx文件,tag_file是目标xlsx文件,sheet_name是目标xlsx里的新sheet名称
print("Start sheet %s copy from %s to %s"%(sheet_name,src_file,tag_file))
wb = load_workbook(src_file)
wb2 = load_workbook(tag_file)
ws = wb.get_sheet_by_name(wb.get_sheet_names()[0])
ws2 = wb2.create_sheet(sheet_name.decode('utf-8'))
max_row=ws.max_row #最大行数
max_column=ws.max_column #最大列数
wm=zip(ws.merged_cells) #开始处理合并单元格
if len(wm)>0 :
for i in range(0,len(wm)):
cell2=str(wm[i]).replace('(<MergeCell ','').replace('>,)','')
print("MergeCell : %s" % cell2)
ws2.merge_cells(cell2)
for m in range(1,max_row + 1):
ws2.row_dimensions[m].height = ws.row_dimensions[m].height
for n in range(1,1 + max_column):
if n<27 :
c=chr(n+64).upper() #ASCII字符,chr(65)='A'
else:
if n < 677 :
c=chr(divmod(n,26)[0]+64)+chr(divmod(n,26)[1]+64)
else:
c=chr(divmod(n,676)[0]+64) + chr(divmod(divmod(n,676)[1],26)[0]+64) + chr(divmod(divmod(n,676)[1],26)[1]+64)
i='%s%d'%(c,m) #单元格编号
if m == 1 :
# print("Modify column %s width from %d to %d" % (n, ws2.column_dimensions[c].width ,ws.column_dimensions[c].width))
ws2.column_dimensions[c].width = ws.column_dimensions[c].width
try:
getattr(ws.cell(row=m, column=c), "value" )
cell1=ws[i] #获取data单元格数据
ws2[i].value=cell1.value #赋值到ws2单元格
if cell1.has_style: #拷贝格式
ws2[i].font = copy(cell1.font)
ws2[i].border = copy(cell1.border)
ws2[i].fill = copy(cell1.fill)
ws2[i].number_format = copy(cell1.number_format)
ws2[i].protection = copy(cell1.protection)
ws2[i].alignment = copy(cell1.alignment)
except AttributeError as e:
print("cell(%s) is %s" % (i,e))
continue
wb2.save(tag_file)
wb2.close()
wb.close()
来源:https://blog.csdn.net/d9394952/article/details/88236217
0
投稿
猜你喜欢
- EXEC SQL WHENEVER SQLERROR CONTINUE; sqlglm(msg_buffer, &buf
- requests库安装和导入第一步:cmd打开命令行,使用如下命令安装requests库。pip install requests由于我的安
- 原理中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那
- 作者: wyh草样出处:https://www.cnblogs.com/wyh0923/p/14084898.html什么是文件文件是系统存
- pytorch定义新的自动求导函数在pytorch中想自定义求导函数,通过实现torch.autograd.Function并重写forwa
- python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号;python中实例化类不需要使用关键字ne
- 在本地使用pycharm连接databricks,大致步骤如下:首先,为了让本地环境能够识别远端的databricks集群环境,需要收集da
- 疑问在调用socket的时候,我们会使用到listen()函数,里面有个参数叫backlog, 例如:socket.listen(5). 那
- 近段时间看了一些论坛上面关于分页的ASP程序依然有许多的关注者,但里面只有代码,没有详细的解释,对于初学者来说,这样总是得不到真正的掌握,此
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tfimport syswith tf.variable_
- 本文实例讲述了PHP数据库表操作的封装类及用法。分享给大家供大家参考,具体如下:数据库表结构:CREATE TABLE `test_user
- 一、什么是 Postman(前世今生)Postman 诞生于 2013 年,一开始只是 Abhinav Asthana 着手于解决 API
- 目录单例模式反射hasattergetattrsetattr总结单例模式一般情况下,类可以生成任意个实例,而单例模式只生成一个实例我们先用单
- 服务端监听端口 listen()方法:net.listen({监听类型},{监听的ip和端口})(conn, err){}返回值:conn是
- 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init__$,类似于java中的构造器,这个就是特殊方
- 服务器响应HTTP的类型ContentType大全,使用方法:<% Response.ContentType =&
- 第一种方法:递归def perms(elements): if len(elements) <=1
- 以下以 IE 代替 Internet Explorer,以 MF 代替 
- pygal的安装和简介,大家可以参阅《pip和pygal的安装实例教程》,下面看看通过pygal实现绘制雷达图代码示例。雷达图(Radar)
- 阅读上一章:Css布局Chapter 13 为文字指定样式我想以一章的篇幅来讨论用CSS设定文字样式的做法是个好点子.一般处理文字内容大概是