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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
基于python编写的微博应用
Oct 17 Python
Python的时间模块datetime详解
Apr 17 Python
Python 调用Java实例详解
Jun 02 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
创建pycharm的自定义python模板方法
May 23 Python
Python实现常见的回文字符串算法
Nov 14 Python
python 等差数列末项计算方式
May 03 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
python中的垃圾回收(GC)机制
Sep 21 Python
Python中基础数据类型 set集合知识点总结
Aug 02 Python
Python制作春联的示例代码
Jan 22 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注入实例
2006/10/09 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
初一家长会邀请函
2014/01/31 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python