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编程中的反模式实例分析
Dec 08 Python
Python中用Spark模块的使用教程
Apr 13 Python
Python实现的递归神经网络简单示例
Aug 11 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
Python实现查找数据库最接近的数据
Jun 08 Python
python将数据插入数据库的代码分享
Aug 16 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
python中%格式表达式实例用法
Jun 18 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通过分类列表产生分类树数组的方法
2015/04/20 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
Python中类型关系和继承关系实例详解
2015/05/25 Python
浅谈Django REST Framework限速
2017/12/12 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
SQL中where和having的区别
2012/06/17 面试题
民生工程实施方案
2014/03/22 职场文书
团支部建设方案
2014/05/02 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2014年采购员工作总结
2014/11/18 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
上下班时间调整通知
2015/04/23 职场文书
单位同意报考证明
2015/06/17 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书