Python使用openpyxl复制整张sheet


Posted in Python onMarch 24, 2021

通过无能的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()
Python 相关文章推荐
python创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python采集博客中上传的QQ截图文件
Jul 18 Python
python修改操作系统时间的方法
May 18 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
详解django三种文件下载方式
Apr 06 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
解决Django no such table: django_session的问题
Apr 07 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
基于Python 函数和方法的区别说明
Mar 24 #Python
Pytorch之扩充tensor的操作
Mar 04 #Python
快速一键生成Python爬虫请求头
Mar 04 #Python
10个顶级Python实用库推荐
Mar 04 #Python
pytorch 把图片数据转化成tensor的操作
Mar 04 #Python
pytorch 计算Parameter和FLOP的操作
Mar 04 #Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 #Python
You might like
PHP开发框架总结收藏
2008/04/24 PHP
Laravel5中contracts详解
2015/03/02 PHP
PDO::inTransaction讲解
2019/01/28 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Python中的闭包实例详解
2014/08/29 Python
初步理解Python进程的信号通讯
2015/04/09 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
使用Python实现批量ping操作方法
2020/05/06 Python
如何理解python面向对象编程
2020/06/01 Python
django中ImageField的使用详解
2020/12/21 Python
python实现定时发送邮件
2020/12/23 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
为什么要有struct关键字
2012/05/08 面试题
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
个人自荐书
2013/12/20 职场文书
村级换届选举方案
2014/05/10 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
志愿服务心得体会
2016/01/15 职场文书
微信小程序和php的登录实现
2021/04/01 PHP