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按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python常见的格式化输出小结
Dec 15 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python实现键盘控制鼠标移动
Nov 27 Python
python监测当前联网状态并连接的实例
Dec 18 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
python中的django是做什么的
Jul 31 Python
Python logging模块handlers用法详解
Aug 14 Python
python 5个实用的技巧
Sep 27 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
计数器详细设计
2006/10/09 PHP
Smarty安装配置方法
2008/04/10 PHP
php SQL Injection with MySQL
2011/02/27 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP的反射机制实例详解
2017/03/29 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python切片用法实例教程
2014/09/08 Python
python中__call__内置函数用法实例
2015/06/04 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python实现月食效果实例代码
2019/06/18 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
资金申请报告范文
2015/05/14 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Go语言特点及基本数据类型使用详解
2022/03/21 Golang