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之有容乃大的list(1)
Sep 14 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
一个Python最简单的接口自动化框架
Jan 02 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
python 动态调用函数实例解析
Oct 21 Python
python数值基础知识浅析
Nov 19 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
大数据分析用java还是Python
Jul 06 Python
python 线程的五个状态
Sep 22 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
MySQL相关说明
2007/01/15 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
vue 组件基础知识总结
2021/01/26 Vue.js
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
本科生个人求职自荐信
2013/09/26 职场文书
大专生的学习自我评价
2013/12/04 职场文书
粗加工管理制度
2014/02/04 职场文书
黄金搭档广告词
2014/03/21 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
迟到检讨书范文
2015/01/27 职场文书
司机岗位职责
2015/02/04 职场文书
机器人总动员观后感
2015/06/09 职场文书
现实表现证明材料
2015/06/19 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
基于Python实现对比Exce的工具
2022/04/07 Python