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中逻辑运算符的使用
May 13 Python
Python中subprocess模块用法实例详解
May 20 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
python破解zip加密文件的方法
May 31 Python
Python2包含中文报错的解决方法
Jul 09 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
next在python中返回迭代器的实例方法
Dec 15 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模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
基python实现多线程网页爬虫
2015/09/06 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Python常用的json标准库
2019/02/19 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
Python count函数使用方法实例解析
2020/03/23 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Keras自定义IOU方式
2020/06/10 Python
详解python polyscope库的安装和例程
2020/11/13 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
JSF如何进行表格处理及取值
2012/08/06 面试题
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
十佳护士获奖感言
2014/02/18 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
z-index不起作用
2021/03/31 HTML / CSS