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中__str__和__repr__方法的区别
Apr 17 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python实现多人聊天室
Mar 31 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
python从PDF中提取数据的示例
Oct 30 Python
python ansible自动化运维工具执行流程
Jun 24 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
中国第一家无线电行
2021/03/01 无线电
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python 装饰器深入理解
2017/03/16 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
django初始化数据库的实例
2018/05/27 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
《三亚落日》教学反思
2014/04/26 职场文书
科技活动总结范文
2015/05/11 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
angular异步验证器防抖实例详解
2022/03/31 Javascript
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
java实现面板之间切换功能
2022/06/10 Java/Android