使用openpyxl复制整张sheet
通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的:
不能拷贝有合并格式的sheet、没有拷贝cell的相关格式(填充、边框、对齐)等参数
所以通过bing继续发掘,最终合成以下代码:
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()
使用openpyxl复制整张sheet的更多相关文章
- Python学习笔记_使用openpyxl操作Excel,在同一个文件里复制某一个sheet
应用场景:定制一个Excel模板文件,其中定义了一个模板Sheet,以此模板文件里的模板sheet为样例,制作报表,里面有不止一个模板样例Sheet 一.软件环境: 1.OS:Win10 64位 2. ...
- Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里
<Windows Azure Platform 系列文章目录> Azure SQL Database (19) Stretch Database 概览 Azure SQL Da ...
- 使用sql语句复制一张表
如何使用sql语句复制一张表? 方法一:第一步:先建一张新表,新表的结构与老表相等. create table newbiao like chengjibiao(老表名); 第二步:将老表中的值复制到 ...
- chrome也可以整张网页截图,保存完整网页为图片
转自:http://www.webkaka.com/blog/archives/chrome-save-a-webpage.html 关于浏览器截图,一直以为Chrome无能为力,最近发现,原来Chr ...
- 如何用sql语句复制一张表
如何用sql语句复制一张表 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...
- Mysql InnoDB行锁不使用索引锁表的时候会锁整张表
原文:http://www.thinkphp.cn/topic/41577.html 如果使用针对InnoDB的表使用行锁,被锁定字段不是主键,也没有针对它建立索引的话.行锁锁定的也是整张表.锁整张表 ...
- 树莓派根分区扩展至整张sd卡
第一步,安装raspi-config sudo apt-get install raspi-config 第二步,运行raspi-config sudo raspi-config 界面选择,Expan ...
- (转) 【oracle调优】优化全表扫---cache整张表或索引
情景分析: 1)某查询必须要走全表扫描 2)该查询执行的频率相当高 3)对执行时间的要求也相当苛刻的话 4)数据库的IO比较吃紧 5)数据库的内存比较宽松 6)该表的大小没有大到离谱 以上情况下,可以 ...
- Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
readonly_table=False#默认表单不锁定 readonly_table=True#默认表单不锁定 # forms.py # ————————19PerfectCRM实现King_adm ...
随机推荐
- wpf 控件简单介绍
- shell脚本监测DNS链接状态给传给zabbix值
#!/bin/sh time_out=0 querygt3s=0 i=1 while [[ $i -le 15 ]] do i=`expr $i + 1` sleep 2 while read lin ...
- python 查找目录下 文件名中含有某字符串的文件
有坑的地方: 如果代码写成这样: [( os.path.abspath(x)) for x in os.listdir(startPath) ] 此代码只能用于当前目录下,listdir列出的都只是文 ...
- SQL 优化经历
一次非常有趣的 SQL 优化经历 阅读本文大概需要 6 分钟. 前言 在网上刷到一篇数据库优化的文章,自己也来研究一波. 场景 数据库版本:5.7.25 ,运行在虚拟机中. 课程表 #课程表 cr ...
- PTA寒假三
抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...
- Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)
類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...
- shell(1)
1:实现shell脚本中循环调用函数 #!/bin/bash output(){ ; num1 <= ; num1++ )) do echo -n "$num1 " done ...
- java 偏向锁、轻量级锁及重量级锁synchronized原理
Java对象头与Monitor java对象头是实现synchronized的锁对象的基础,synchronized使用的锁对象是存储在Java对象头里的. 对象头包含两部分:Mark Word 和 ...
- saltstack基础知识
saltstack简介 saltstack基于python开发的C/S架构的配置管理工具,分为服务器端salt-master和客户端salt-minion.并且支持浩称最快的ZeroMQ消息队列机制, ...
- 在flask框架中,对wtforms的SelectMultipleField的一个报错处理
先粘贴代码: form.py文件: users = SelectMultipleField( label="请选择用户", validators=[ DataRequired(&q ...