python操作Excel模块openpyxl
本文内容纲要:
-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