首页 文章资讯内容详情

python操作Excel模块openpyxl

2026-06-01 2 花语

本文内容纲要:

-1、安装 -2、创建一个excel文件,并写入不同类的内容 -3、创建sheet -4、操作单元格 -5、操作批量的单元格 -获取所有的行对象: -获取所有的列对象: -6、操作已经存在的文件 -7、单元格类型 -8、使用公式 -9、合并单元格 -10、插入一个图片 -11、隐藏单元格 -13、画一个饼图 -14、设定一个表格区域,并设定表格的格式 -15、给单元格设定字体颜色 -16、设定字体和大小 -17、设定行和列的字体 -18、设定单元格的边框、字体、颜色、大小和边框背景色 -19、常用的样式和属性设置

1、安装

pipinstallopenpyxl

想要在文件中插入图片文件,需要安装pillow,安装文件:PIL-fork-1.1.7.win-amd64-py2.7.exe

·font(字体类):字号、字体颜色、下划线等

·fill(填充类):颜色等

·border(边框类):设置单元格边框

·alignment(位置类):对齐方式

·number_format(格式类):数据格式

·protection(保护类):写保护

2、创建一个excel文件**,并写入不同类的内容**

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook wb=Workbook()#创建文件对象 #grabtheactiveworksheet ws=wb.active#获取第一个sheet #Datacanbeassigneddirectlytocells ws[A1]=42#写入数字 ws[B1]="你好"+"automationtest"#写入中文(unicode中文也可) #Rowscanalsobeappended ws.append([1,2,3])#写入多个单元格 #Pythontypeswillautomaticallybeconverted importdatetime importtime ws[A2]=datetime.datetime.now()#写入一个当前时间 #写入一个自定义的时间格式 ws[A3]=time.strftime("%Y年%m月%d日%H时%M分%S秒",time.localtime()) #Savethefile wb.save("e:\\sample.xlsx")

3、创建sheet

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook wb=Workbook() ws1=wb.create_sheet("Mysheet")#创建一个sheet ws1.title="NewTitle"#设定一个sheet的名字 ws2=wb.create_sheet("Mysheet",0)#设定sheet的插入位置默认插在后面 ws2.title=u"你好"#设定一个sheet的名字必须是Unicode ws1.sheet_properties.tabColor="1072BA"#设定sheet的标签的背景颜色 #获取某个sheet对象 printwb.get_sheet_by_name(u"你好") printwb["NewTitle"] #获取全部sheet的名字,遍历sheet名字 printwb.sheetnames forsheet_nameinwb.sheetnames: printsheet_name print"*"*50 forsheetinwb: printsheet.title #复制一个sheet wb["NewTitle"]["A1"]="zeke" source=wb["NewTitle"] target=wb.copy_worksheet(source) #w3=wb.copy_worksheet(wb[newtitle]) #ws3.title=new2 #wb.copy_worksheet(wb[newtitle]).title=hello #Savethefile wb.save("e:\\sample.xlsx")

4、操作单元格

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook wb=Workbook() ws1=wb.create_sheet("Mysheet")#创建一个sheet ws1["A1"]=123.11 ws1["B2"]="你好" d=ws1.cell(row=4,column=2,value=10) printws1["A1"].value printws1["B2"].value printd.value #Savethefile wb.save("e:\\sample.xlsx")

5、操作批量的单元格

无论ws.rows还是ws.iter_rows都是一个对象

除上述两个对象外单行,单列都是一个元祖,多行多列是二维元祖

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook wb=Workbook() ws1=wb.create_sheet("Mysheet")#创建一个sheet ws1["A1"]=1 ws1["A2"]=2 ws1["A3"]=3 ws1["B1"]=4 ws1["B2"]=5 ws1["B3"]=6 ws1["C1"]=7 ws1["C2"]=8 ws1["C3"]=9 #操作单列 printws1["A"] forcellinws1["A"]: printcell.value #操作多列,获取每一个值 printws1["A:C"] forcolumninws1["A:C"]: forcellincolumn: printcell.value #操作多行 row_range=ws1[1:3] printrow_range forrowinrow_range: forcellinrow: printcell.value print"*"*50 forrowinws1.iter_rows(min_row=1,min_col=1,max_col=3,max_row=3): forcellinrow: printcell.value #获取所有行 printws1.rows forrowinws1.rows: printrow print"*"*50 #获取所有列 printws1.columns forcolinws1.columns: printcol wb.save("e:\\sample.xlsx")

使用百分数

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) wb.guess_types=True ws=wb.active ws["D1"]="12%" printws["D1"].value #Savethefile wb.save("e:\\sample.xlsx") #结果会打印小数 #-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) wb.guess_types=False ws=wb.active ws["D1"]="12%" printws["D1"].value wb.save("e:\\sample.xlsx") #结果会打印百分数

获取所有的行对象:

#coding=utf-8 fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) ws=wb.active rows=[] forrowinws.iter_rows(): rows.append(row) printrows#所有行 printrows[0]#获取第一行 printrows[0][0]#获取第一行第一列的单元格对象 printrows[0][0].value#获取第一行第一列的单元格对象的值 printrows[len(rows)-1]#获取最后行printrows[-1] printrows[len(rows)-1][len(rows[0])-1]#获取第后一行和最后一列的单元格对象 printrows[len(rows)-1][len(rows[0])-1].value#获取第后一行和最后一列的单元格对象的值

获取所有的列对象:

#coding=utf-8 fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) ws=wb.active cols=[] cols=[] forcolinws.iter_cols(): cols.append(col) printcols#所有列 printcols[0]#获取第一列 printcols[0][0]#获取第一列的第一行的单元格对象 printcols[0][0].value#获取第一列的第一行的值 print"*"*30 printcols[len(cols)-1]#获取最后一列 printcols[len(cols)-1][len(cols[0])-1]#获取最后一列的最后一行的单元格对象 printcols[len(cols)-1][len(cols[0])-1].value#获取最后一列的最后一行的单元格对象的值

6、操作已经存在的****文件

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) wb.guess_types=True#猜测格式类型 ws=wb.active ws["D1"]="12%" printws["D1"].value #Savethefile wb.save("e:\\sample.xlsx") #注意如果原文件有一些图片或者图标,则保存的时候可能会导致图片丢失

7、单元格类型

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook importdatetime wb=load_workbook(e:\\sample.xlsx) ws=wb.active wb.guess_types=True ws["A1"]=datetime.datetime(2010,7,21) printws["A1"].number_format ws["A2"]="12%" printws["A2"].number_format ws["A3"]=1.1 printws["A4"].number_format ws["A4"]="中国" printws["A5"].number_format #Savethefile wb.save("e:\\sample.xlsx") 执行结果: yyyy-mm-ddh:mm:ss 0% General General #如果是常规,显示general,如果是数字,显示0.00_,如果是百分数显示0% 数字需要在Excel中设置数字类型,直接写入的数字是常规类型

8、使用****公式

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) ws1=wb.active ws1["A1"]=1 ws1["A2"]=2 ws1["A3"]=3 ws1["A4"]="=SUM(1,1)" ws1["A5"]="=SUM(A1:A3)" printws1["A4"].value#打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值 printws1["A5"].value#打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值 #Savethefile wb.save("e:\\sample.xlsx")

9、合并****单元格

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxlimportload_workbook wb=load_workbook(e:\\sample.xlsx) ws1=wb.active ws.merge_cells(A2:D2) ws.unmerge_cells(A2:D2)#合并后的单元格,脚本单独执行拆分操作会报错,需要重新执行合并操作再拆分 #orequivalently ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4) ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4) #Savethefile wb.save("e:\\sample.xlsx")

1****0、插入一个图片

需要先安装Pilow,安全文件是:PIL-fork-1.1.7.win-amd64-py2.7.exe

#-*-coding:utf-8-*- fromopenpyxlimportload_workbook fromopenpyxl.drawing.imageimportImage wb=load_workbook(e:\\sample.xlsx) ws1=wb.active img=Image(e:\\1.png) ws1.add_image(img,A1) #Savethefile wb.save("e:\\sample.xlsx")

11、隐藏单元格

#-*-coding:utf-8-*- fromopenpyxlimportload_workbook fromopenpyxl.drawing.imageimportImage wb=load_workbook(e:\\sample.xlsx) ws1=wb.active ws1.column_dimensions.group(A,D,hidden=True)#隐藏a到d列范围内的列 #ws1.row_dimensions无group方法 #Savethefile wb.save("e:\\sample.xlsx") 12、画一个柱状图 #-*-coding:utf-8-*- fromopenpyxlimportload_workbook fromopenpyxlimportWorkbook fromopenpyxl.chartimportBarChart,Reference,Series wb=load_workbook(e:\\sample.xlsx) ws1=wb.active wb=Workbook() ws=wb.active foriinrange(10): ws.append([i]) values=Reference(ws,min_col=1,min_row=1,max_col=1,max_row=10) chart=BarChart() chart.add_data(values) ws.add_chart(chart,"E15") #Savethefile wb.save("e:\\sample.xlsx")

13、画一个饼图

#-*-coding:utf-8-*- fromopenpyxlimportload_workbook fromopenpyxlimportWorkbook fromopenpyxl.chartimport(PieChart,ProjectedPieChart,Reference) fromopenpyxl.chart.seriesimportDataPoint data=[ [Pie,Sold], [Apple,50], [Cherry,30], [Pumpkin,10], [Chocolate,40], ] wb=Workbook() ws=wb.active forrowindata: ws.append(row) pie=PieChart() labels=Reference(ws,min_col=1,min_row=2,max_row=5) data=Reference(ws,min_col=2,min_row=1,max_row=5) pie.add_data(data,titles_from_data=True) pie.set_categories(labels) pie.title="Piessoldbycategory" #Cutthefirstsliceoutofthepie slice=DataPoint(idx=0,explosion=20) pie.series[0].data_points=[slice] ws.add_chart(pie,"D1") ws=wb.create_sheet(title="Projection") data=[ [Page,Views], [Search,95], [Products,4], [Offers,0.5], [Sales,0.5], ] forrowindata: ws.append(row) projected_pie=ProjectedPieChart() projected_pie.type="pie" projected_pie.splitType="val"#splitbyvalue labels=Reference(ws,min_col=1,min_row=2,max_row=5) data=Reference(ws,min_col=2,min_row=1,max_row=5) projected_pie.add_data(data,titles_from_data=True) projected_pie.set_categories(labels) ws.add_chart(projected_pie,"A10") fromcopyimportdeepcopy projected_bar=deepcopy(projected_pie) projected_bar.type="bar" projected_bar.splitType=pos#splitbyposition ws.add_chart(projected_bar,"A27") #Savethefile wb.save("e:\\sample.xlsx")

14、设定一个表格区域,并设定表格的格式

#-*-coding:utf-8-*- fromopenpyxlimportload_workbook fromopenpyxlimportWorkbook fromopenpyxl.worksheet.tableimportTable,TableStyleInfo wb=Workbook() ws=wb.active data=[ [Apples,10000,5000,8000,6000], [Pears,2000,3000,4000,5000], [Bananas,6000,6000,6500,6000], [Oranges,500,300,200,700], ] #addcolumnheadings.NB.thesemustbestrings ws.append(["Fruit","2011","2012","2013","2014"]) forrowindata: ws.append(row) tab=Table(displayName="Table1",ref="A1:E5") #Addadefaultstylewithstripedrowsandbandedcolumns style=TableStyleInfo(name="TableStyleMedium9",showFirstColumn=True, showLastColumn=True,showRowStripes=True,showColumnStripes=True) #第一列是否和样式第一行颜色一行,第二列是否··· #是否隔行换色,是否隔列换色 tab.tableStyleInfo=style ws.add_table(tab) #Savethefile wb.save("e:\\sample.xlsx")

15、给单元格设定****字体颜色

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxl.stylesimportcolors fromopenpyxl.stylesimportFont wb=Workbook() ws=wb.active a1=ws[A1] d4=ws[D4] ft=Font(color=colors.RED)#color="FFBB00",颜色编码也可以设定颜色 a1.font=ft d4.font=ft #IfyouwanttochangethecolorofaFont,youneedtoreassignit:: #italic倾斜字体 a1.font=Font(color=colors.RED,italic=True)#thechangeonlyaffectsA1 a1.value="abc" #Savethefile wb.save("e:\\sample.xlsx")

16、设定****字体和大小

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxl.stylesimportcolors fromopenpyxl.stylesimportFont wb=Workbook() ws=wb.active a1=ws[A1] d4=ws[D4] a1.value="abc" fromopenpyxl.stylesimportFont fromcopyimportcopy ft1=Font(name=u宋体,size=14) ft2=copy(ft1)#复制字体对象 ft2.name="Tahoma" printft1.name printft2.name printft2.size#copiedfromthe a1.font=ft1 #Savethefile wb.save("e:\\sample.xlsx")

17、设定****行和列的字体

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxl.stylesimportFont wb=Workbook() ws=wb.active col=ws.column_dimensions[A] col.font=Font(bold=True)#将A列设定为粗体 row=ws.row_dimensions[1] row.font=Font(underline="single")#将第一行设定为下划线格式 #Savethefile wb.save("e:\\sample.xlsx")

18、设定单元格的边框、字体、颜色大小边框背景****色

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxl.stylesimportFont fromopenpyxl.stylesimportNamedStyle,Font,Border,Side,PatternFill wb=Workbook() ws=wb.active highlight=NamedStyle(name="highlight") highlight.font=Font(bold=True,size=20,color="ff0100") highlight.fill=PatternFill("solid",fgColor="DDDDDD")#背景填充 bd=Side(style=thick,color="000000") highlight.border=Border(left=bd,top=bd,right=bd,bottom=bd) printdir(ws["A1"]) ws["A1"].style=highlight #Savethefile wb.save("e:\\sample.xlsx")

19、常用的样式和****属性设置

#-*-coding:utf-8-*- fromopenpyxlimportWorkbook fromopenpyxl.stylesimportFont fromopenpyxl.stylesimportNamedStyle,Font,Border,Side,PatternFill fromopenpyxl.stylesimportPatternFill,Border,Side,Alignment,Protection,Font wb=Workbook() ws=wb.active ft=Font(name=u微软雅黑, size=11, bold=False, italic=False, vertAlign=None, underline=none, strike=False, color=FF000000) fill=PatternFill(fill_type="solid", start_color=FFEEFFFF, end_color=FF001100) #边框可以选择的值为:hair,medium,dashDot,dotted,mediumDashDot,dashed,mediumDashed,mediumDashDotDot,dashDotDot,slantDashDot,double,thick,thin] #diagonal表示对角线 bd=Border(left=Side(border_style="thin", color=FF001000), right=Side(border_style="thin", color=FF110000), top=Side(border_style="thin", color=FF110000), bottom=Side(border_style="thin", color=FF110000), diagonal=Side(border_style=None, color=FF000000), diagonal_direction=0, outline=Side(border_style=None, color=FF000000), vertical=Side(border_style=None, color=FF000000), horizontal=Side(border_style=None, color=FF110000) ) alignment=Alignment(horizontal=general, vertical=bottom, text_rotation=0, wrap_text=False, shrink_to_fit=False, indent=0) number_format=General protection=Protection(locked=True, hidden=False) ws["B5"].font=ft ws["B5"].fill=fill ws["B5"].border=bd ws["B5"].alignment=alignment ws["B5"].number_format=number_format ws["B5"].value="zeke" #Savethefile wb.save("e:\\sample.xlsx")

本文内容总结:1、安装,2、创建一个excel文件,并写入不同类的内容,3、创建sheet,4、操作单元格,5、操作批量的单元格,获取所有的行对象:,获取所有的列对象:,6、操作已经存在的文件,7、单元格类型,8、使用公式,9、合并单元格,10、插入一个图片,11、隐藏单元格,13、画一个饼图,14、设定一个表格区域,并设定表格的格式,15、给单元格设定字体颜色,16、设定字体和大小,17、设定行和列的字体,18、设定单元格的边框、字体、颜色、大小和边框背景色,19、常用的样式和属性设置,

原文链接:https://www.cnblogs.com/zeke-python-road/p/8986318.html