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+mysql实现简单的web程序
Sep 11 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
Python ldap实现登录实例代码
Sep 30 Python
Django视图和URL配置详解
Jan 31 Python
Python输出各行命令详解
Feb 01 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python 字典修改键(key)的几种方法
Aug 10 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 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
解析csv数据导入mysql的方法
2013/07/01 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
在python里从协程返回一个值的示例
2019/02/19 Python
anaconda如何查看并管理python环境
2019/07/05 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
JAVA和C++的区别
2013/10/06 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
成人大专自我鉴定范文
2013/10/19 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
小学生评语大全
2014/04/18 职场文书
2014年三万活动总结
2014/04/26 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
管理失职检讨书
2015/05/05 职场文书
《观察物体》教学反思
2016/02/17 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js