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 相关文章推荐
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
python增加矩阵维度的实例讲解
Apr 04 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
关于Python错误重试方法总结
Jan 03 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
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP发送短信代码分享
2015/08/11 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
servlet面试题
2012/08/20 面试题
《小猫刮胡子》教学反思
2014/02/21 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
英语感谢信范文
2015/01/20 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
班主任开场白
2015/06/01 职场文书
电影建党伟业观后感
2015/06/01 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
舞出我人生观后感
2015/06/16 职场文书
运动会入场词
2015/07/18 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android