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中AND、OR的一个使用小技巧
Feb 18 Python
bpython 功能强大的Python shell
Feb 16 Python
快速入门python学习笔记
Dec 06 Python
python 动态加载的实现方法
Dec 22 Python
python删除不需要的python文件方法
Apr 24 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
Django Rest framework频率原理与限制
Jul 26 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
python 绘制国旗的示例
Sep 27 Python
python如何编写类似nmap的扫描工具
Nov 06 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
人族 Terran 基本策略
2020/03/14 星际争霸
php入门教程 精简版
2009/12/13 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
js 调用百度分享功能
2017/02/27 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
vue实现一拉到底的滑动验证
2019/07/25 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python实现桌面气泡提示功能
2019/07/29 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Python zip函数打包元素实例解析
2019/12/11 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
早读迟到检讨书
2014/01/24 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
工程建设实施方案
2014/03/14 职场文书
护士个人自我鉴定
2014/03/24 职场文书
组工干部演讲稿
2014/09/02 职场文书
法务专员岗位职责
2015/02/14 职场文书
安全教育培训心得体会
2016/01/15 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫