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写的一个简单监控系统
Jun 19 Python
举例讲解Python中的死锁、可重入锁和互斥锁
Nov 05 Python
Python使用functools实现注解同步方法
Feb 06 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Python应用领域和就业形势分析总结
May 14 Python
PyQt5 多窗口连接实例
Jun 19 Python
python队列原理及实现方法示例
Nov 27 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
anaconda python3.8安装后降级
Jun 11 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
PHP的FTP学习(一)
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
PHP无限分类(树形类)
2013/09/28 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python生成ppt的方法
2018/06/07 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python实现自动签到脚本功能
2020/08/20 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
法律进社区实施方案
2014/03/21 职场文书
难忘的一课教学反思
2014/04/30 职场文书
优秀毕业生求职信
2014/06/05 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
公开致歉信
2019/06/24 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android