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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Python 离线工作环境搭建的方法步骤
Jul 29 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Python Pandas知识点之缺失值处理详解
May 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
PHP中str_replace函数使用小结
2008/10/11 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
JS重要知识点小结
2011/11/06 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
js操作二进制数据方法
2018/03/03 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
解决python 找不到module的问题
2020/02/12 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
网络研修随笔感言
2014/02/17 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
教师师德考核自我评价
2014/09/13 职场文书
大学学生个人总结
2015/02/15 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers