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实现分割文件及合并文件的方法
Jul 10 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
Python贪心算法实例小结
Apr 22 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
带你认识Django
Jan 15 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 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之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
详解php中的implements 使用
2017/06/13 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
js创建对象的方式总结
2015/01/10 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
python计算最大优先级队列实例
2013/12/18 Python
Django返回json数据用法示例
2016/09/18 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
《掌声》教学反思
2014/02/23 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
修辞手法有哪些?
2019/08/29 职场文书