openpyxl读写excel,pythonopenpyxl写excel
最近一直在做项目中的自动化工作,为了摆脱繁琐重复的工作,专心做数据分析。自动化python很好,但是因为您必须提交报告,
一定要好看什么的。熊猫功能强大,但不能完全操作Excel。现在学vba有点晚了。于是我找到了这个openpyxl包,用python修改Excel。由于水平有限,我琢磨了两天,踩了很多坑,才把自动化工作做完(至少多几个小时,很美)。
在这里,记下这两天的笔记,踩坑,新手躲在坑里,供自己以后参考。如有疑问,请见谅并指出。谢谢你。
1从openpyxl导入Load _ workbook 2从openpyxl.styles导入颜色、字体、填充、命名样式3从openpyxl.styles导入图案Fill、Border、Side、Alignment45#加载文件6WB=load _ workbook(。/5a . xlsx’)工作簿:工作簿,一个excel文件包含多个工作表。
工作表:工作表,有多个工作簿,并且工作表的名称是可识别的,例如“sheet1”和“sheet2”。
Cell: noble棉花糖,存储数据对象。
文章中使用的表格是:
操作说明书
1# read sheetname2print(输出文件的所有工作表名称:,wb.sheetnames)3ws=wb[5a]45#或6sheet _ names=WB。sheet names 7 ws 2=WB[sheet _ names[0]]#索引为0的第一个工作表8print(ws是ws2)。
[5a]
真实的
1#修改工作表名称23ws。title= 5a _ 4 print( modify sheetname:,wb.sheetnames)修改sheet name:
[5a_]
1#创建一个新表2#创建一个必须分配给对象的新表,否则只有名称而没有实际的新表。34ws4=wb.create _ sheet (index=0,title= newsheet) 5 #如果不写任何参数,它将被插入到最后一个位置,名称默认为sheet。工作表1.order 67ws 5=WB . Create _ sheet()8 print( Create a new sheet:,wb.sheetnames)创建新工作表:
[新闻页, 5a_ ,页]
1# delete sheet2wb.remove(ws4) #此处只能写入工作表对象,而不能写入sheetname3print (delete sheet:,wb.sheetnames)。删除工作表:
[5a_ ,工作表]
1#修改工作表标签的背景颜色,默认为白色,设置为RRGGBB模式2ws。sheet _ properties . tab color= FFA 500 34 #读取有效区域56print(最大列数为:,ws.max_column)7print(最大行数为:,ws.max_row)最大列数。
最大行数是:17
1#插入行和列2ws.insert_rows(1) #插入一行3ws。第一行insert _ cols (2,4)#从第二列插入四列45#删除行和列6ws.delete_cols(6,3) #从第六列(f列)删除三列,即(f:)
1 # read 2c=ws[ a1 ]3c 1=ws . cell(row=1,column=2) 4print (c,C1) 5print (c.value,C1.value)
dth _标题省
1#修改2ws[A1]=景点名称 3ws.cell(1,2)。value= province 4print(c.value,c1.value)景点名称省份
1#读取许多高贵的棉花糖2 3 cell _ range=ws[ A1:B2 ]4 colc=ws[ C ]5 col _ range=ws[ C :D ]6 row 10=ws[10]7 row _ range=ws[5:10]8 #返回的结果都是!这里嵌套了两个元组,每一行的贵族棉花糖都位于同一个元组中。((, ), (, ))
1 # 2 for row in ws . ITER _ rows(min _ row=1,max _ row=3,3 min _ col=1,max _ col=2):4 for cell in row:5 print(cell)6 #也可以使用worksheet.iter_col(),用法相同`` cell 5a _ 。A1单元格“5a _”。B1单元格“5a _”。A2单元格“5a _”。B2细胞 5a _ 。a3单元格“5a _”。B3 `1 #合并高贵的棉花糖
2ws.merge_cells(F1:G1 )
3w [f1]=合并两个高贵的棉花糖
4#或
5ws.merge_cells(start_row=2,start_column=6,end_row=3,end_column=8)
6ws.cell(2,6)。value=合并三个高贵的棉花糖
七
8#取消贵族棉花糖合并
9ws.unmerge_cells(F1:G1 )
10#或
11ws.unmerge_cells(start_row=2,start_column=6,end_row=3,end_column=8)
12
13wb.save(。/5a . xlsx’)
保存前的14#操作。保存文件时,必须关闭文件!
立正!Openpyxl对Excel的修改不像xlwings那样是实时的,他的修改是暂存在内存中的,所以当后期修改的时候,比如我准备在第一行插入一个新行作为标题,那么当我对新A1的贵族棉花糖进行操作的时候,原来A1(现在A2)的贵族棉花糖原来还在内存中的修改就会被覆盖。所以先存起来,或者一开始就规划好零钱操作,避免这样的事情发生。(别问我怎么知道的,都是眼泪o (957)
2ws=wb[5a_]
3#我们来设置一个表头。
4w。insert _ rows (1) #在第一行插入一个新行
5ws.merge_cells(A1:E1) #合并高贵的棉花糖
6a1=ws[A1]
WS[ A1 ]= 5A级景区名单
八
9#设置字体
0ft=font (name= Microsoft Yahei ,color= 00000 ,size=15,b=true)
11
12名称:字体名称
13color:颜色通常是RGB或aRGB十六进制值。
14b(粗体):粗体(布尔)
15i(斜体):倾斜(粗体)
16阴影:阴影(布尔)
17下划线:下划线(双重会计,单一,双重,单一会计)
18charset:字符集(int)
19strike:删除(布尔型)
20
21a1.font=ft
22
23#设置文本对齐方式
24
25ali=对齐(水平=居中,垂直=居中)
26
27水平:水平对齐(中心连续,常规,分布式,
28 左,填充,居中,对齐,右)
29垂直:垂直对齐(分布式,顶部,中心,两端对齐,底部)
30
31
32a1.alignment=ali
33
34#设置舱口
35
36fill=PatternFill(solid ,fgColor=FFA500 )
37#颜色一般用十六进制RGB。
38 #‘实心’是一种影线类型,详情请参考文档。
39
40a1.fill=fill
Openpyxl.styles.fills模块参数文档(链接阅读原文)1#设置边框
2=side (style= medium ,color= 00000) #设置边框样式
3
4style:边框线的样式{ 爱听歌曲的微笑,偏点点,点点点,头发,中点点点,
5 虚线,中虚线,粗,虚线点点,中,
6 double , thin , mediumDashDotDot}
7
八
9border=Border(上=边,下=边,左=边,右=边)
10
11top (top)、bottom (bottom)、left (left)、right (right):必须是Side类型。
12对角线:斜线侧文字
13diagonalDownd:右斜杠布尔值
14对角线:左斜线粗线
15
16
17# a1.border=border
1对于WS A1: E1 中的项:#删除元组中的每个单元格以更改样式
19 item.border=边境
20
1wb.save(。/5a.xlsx) #保存更改
再次关注!a1.border=border不能用,否则只会如下图所示。B1: E1贵族棉花糖没有线。个人认为是因为线框涉及到相邻贵族棉花糖的修改,所以需要单独修改每个贵族棉花糖。你不能用ws[A1:E1]。边框=边框。从前面的内容我们可以知道,openpyxl的很多贵族棉花糖其实都是一个tuple,tuple没有style方法,必须一个一个改!其实还有其他官方途径,后面会讲到。[图片](https://yqfile . alicdn . com/d 51 a6b 37 ea 052 e 67940451 BDC 149 D2 A8 f 7 b 755 . png)按列或行设置样式1#现在我们设置整个表格。
2
3#阅读
4wb=load_workbook(。/5a . xlsx’)
5ws=wb[5a_]
六
7#读取数据表范围
8rows=ws.max_row
9cols=ws.max_column
10
1号字体
1 font 1=font(name= Microsoft Yahei ,size=11,b=True)
1 font 2=font(name= Microsoft Yahei ,size=11)
14
15#边框
1line _ t=side (style= thin ,color= 00000) #细边框
1line _ m=side (style= medium ,color= 00000) #粗边框
18border1=Border(上=line_m,下=line_t,左=line_t,右=line_t)
9 #与标题相邻的边缘设置为与标题相同。
20border2=Border(上=line_t,下=line_t,左=line_t,右=line_t)
21
2 #填料
23fill=PatternFill(solid ,fgColor=CFCFCF )
24
25#对齐
26对齐=对齐(水平=“居中”,垂直=“居中”)
27
28#包装和命名样式
29sty1=NamedStyle(name=sty1 ,font=font1,fill=fill,
30 border=border1,alignment=alignment)
31sty2=NamedStyle(name=sty2 ,font=font2,border=border2,alignment=alignment)
32
33对于范围内的r(第2行第1行):
范围内的c为34(1,列):
35如果r==2:
36 ws.cell(r,c)。style=sty1
37其他:
38 ws.cell(r,c)。风格=风格2
39
40wb.save(。/5a . xlsx’)
![图片](https://yqfile . alicdn . com/2881d 58 e 87 c 97 bb 7 ff 313 AC 56 E1 e 84 ca 557 ca 279 . png)对于设置标题样式,其实官方也给出了自定义功能(链接阅读原文)。设置好范围后,范围内的贵族棉花糖会被合并,样式会被应用,就像我这里不赘述一样。有兴趣的可以看看。非常实用。原文发布于2018年12月24日。本文作者:混沌星系中的一扇星空之窗。本文来自云起社区伙伴“【Python爱好者社区】(https://MP . weixin . QQ . com/s/bore 8 C3 azaadpvgflw 5 ca)”。资料可以关注“python_shequ”微信微信官方账号。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。