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实现一个简单的能够上传下载的HTTP服务器
May 05 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
python中的格式化输出用法总结
Jul 28 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python中图像通道分离与合并实例
Jan 17 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
详解python datetime模块
Aug 17 Python
python简单实现9宫格图片实例
Sep 03 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
删除select中所有option选项jquery代码
2013/08/12 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
pycharm 使用心得(三)Hello world!
2014/06/05 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python列表切片用法示例
2017/04/19 Python
python之生产者消费者模型实现详解
2019/07/27 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python中的itertools的使用详解
2020/01/13 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
自主招生自荐信范文
2013/12/04 职场文书
竞聘书格式及范文
2014/03/31 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
计划生育个人总结
2015/03/02 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
python实现进度条的多种实现
2021/04/29 Python