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的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
详解详解Python中writelines()方法的使用
May 25 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
对python字典过滤条件的实例详解
Jan 22 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
python 默认参数相关知识详解
Sep 18 Python
python下载库的步骤方法
Oct 12 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Python @property及getter setter原理详解
Mar 31 Python
python在协程中增加任务实例操作
Feb 28 Python
分享几种python 变量合并方法
Mar 20 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP 5.0 Pear安装方法
2006/12/06 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
JavaScript类的写法
2016/09/17 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
常用python编程模板汇总
2016/02/12 Python
Python对数据库操作
2016/03/28 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python3 max()函数基础用法
2019/02/19 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
Android笔试题总结
2014/11/29 面试题
办理信用卡工作证明
2014/01/11 职场文书
青年志愿者活动总结
2014/04/26 职场文书
宣传工作经验材料
2014/06/02 职场文书
公司应聘自荐书
2014/06/14 职场文书
结对共建协议书
2014/08/20 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书