1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python办公自动化之 openpyxl 操作 Excel

Python办公自动化之 openpyxl 操作 Excel

时间:2020-08-29 04:06:48

相关推荐

Python办公自动化之 openpyxl 操作 Excel

今天给大家分享一篇用 openpyxl 操作 Excel 的 Python 办公自动化文章。5分钟就能掌握~

各种数据需要导入Excel?多个Excel要合并?目前,Python处理Excel文件有很多库,openpyxl算是其中功能和性能做的比较好的一个。接下来我将为大家介绍各种Excel操作。

打开Excel文件

新建一个Excel文件

fromopenpyxlimportWorkbookwb=Workbook()

打开现有Excel文件

fromopenpyxlimportload_workbookwb2=load_workbook('test.xlsx')

打开大文件时,根据需求使用只读或只写模式减少内存消耗。

wb=load_workbook(filename='large_file.xlsx',read_only=True)wb=Workbook(write_only=True)

获取、创建工作表

获取当前活动工作表:

ws=wb.active

创建新的工作表:

ws1=wb.create_sheet("Mysheet")#insertattheend(default)#orws2=wb.create_sheet("Mysheet",0)#insertatfirstposition#orws3=wb.create_sheet("Mysheet",-1)#insertatthepenultimateposition

使用工作表名字获取工作表:

ws3=wb["NewTitle"]

获取所有的工作表名称:

>>>print(wb.sheetnames)['Sheet2','NewTitle','Sheet1']#使用for循环遍历所有的工作表:>>>forsheetinwb:...print(sheet.title)

保存

保存到流中在网络中使用:

fromtempfileimportNamedTemporaryFilefromopenpyxlimportWorkbookwb=Workbook()withNamedTemporaryFile()astmp:wb.save(tmp.name)tmp.seek(0)stream=tmp.read()#保存到文件:wb=Workbook()wb.save('balances.xlsx')#保存为模板:wb=load_workbook('document.xlsx')wb.template=Truewb.save('document_template.xltx')

单元格

单元格位置作为工作表的键直接读取:

c=ws['A4']

为单元格赋值:

ws['A4']=4c.value='hello,world'

多个单元格 可以使用切片访问单元格区域:

cell_range=ws['A1':'C2']

使用数值格式:

#setdateusingaPythondatetime>>>ws['A1']=datetime.datetime(,7,21)>>>ws['A1'].number_format'yyyy-mm-ddh:mm:ss'

使用公式:

#addasimpleformulaws["A1"]="=SUM(1,1)"

合并单元格时,除左上角单元格外,所有单元格都将从工作表中删除:

ws.merge_cells('A2:D2')ws.unmerge_cells('A2:D2')#orequivalentlyws.merge_cells(start_row=2,start_column=1,end_row=4,end_column=4)ws.unmerge_cells(start_row=2,start_column=1,end_row=4,end_column=4)

行、列

可以单独指定行、列、或者行列的范围:

colC=ws['C']col_range=ws['C:D']row10=ws[10]row_range=ws[5:10]

可以使用Worksheet.iter_rows()方法遍历行:

>>>forrowinws.iter_rows(min_row=1,max_col=3,max_row=2):...forcellinrow:...print(cell)<CellSheet1.A1><CellSheet1.B1><CellSheet1.C1><CellSheet1.A2><CellSheet1.B2><CellSheet1.C2>

同样的Worksheet.iter_cols()方法将遍历列:

>>>forcolinws.iter_cols(min_row=1,max_col=3,max_row=2):...forcellincol:...print(cell)<CellSheet1.A1><CellSheet1.A2><CellSheet1.B1><CellSheet1.B2><CellSheet1.C1><CellSheet1.C2>

遍历文件的所有行或列,可以使用Worksheet.rows属性:

>>>ws=wb.active>>>ws['C9']='helloworld'>>>tuple(ws.rows)((<CellSheet.A1>,<CellSheet.B1>,<CellSheet.C1>),(<CellSheet.A2>,<CellSheet.B2>,<CellSheet.C2>),(<CellSheet.A3>,<CellSheet.B3>,<CellSheet.C3>),(<CellSheet.A4>,<CellSheet.B4>,<CellSheet.C4>),(<CellSheet.A5>,<CellSheet.B5>,<CellSheet.C5>),(<CellSheet.A6>,<CellSheet.B6>,<CellSheet.C6>),(<CellSheet.A7>,<CellSheet.B7>,<CellSheet.C7>),(<CellSheet.A8>,<CellSheet.B8>,<CellSheet.C8>),(<CellSheet.A9>,<CellSheet.B9>,<CellSheet.C9>))

Worksheet.columns属性:

>>>tuple(ws.columns)((<CellSheet.A1>,<CellSheet.A2>,<CellSheet.A3>,<CellSheet.A4>,<CellSheet.A5>,<CellSheet.A6>,...<CellSheet.B7>,<CellSheet.B8>,<CellSheet.B9>),(<CellSheet.C1>,<CellSheet.C2>,<CellSheet.C3>,<CellSheet.C4>,<CellSheet.C5>,<CellSheet.C6>,<CellSheet.C7>,<CellSheet.C8>,<CellSheet.C9>))

使用Worksheet.append()或者迭代使用Worksheet.cell()新增一行数据:

>>>forrowinrange(1,40):...ws1.append(range(600))>>>forrowinrange(10,20):...forcolinrange(27,54):..._=ws3.cell(column=col,row=row,value="{0}".format(get_column_letter(col)))

插入操作比较麻烦。可以使用Worksheet.insert_rows()插入一行或几行:

>>>fromopenpyxl.utilsimportget_column_letter>>>ws.insert_rows(7)>>>row7=ws[7]>>>forcolinrange(27,54):..._=ws3.cell(column=col,row=7,value="{0}".format(get_column_letter(col)))

Worksheet.insert_cols()操作类似。Worksheet.delete_rows()Worksheet.delete_cols()用来批量删除行和列。

只读取值

使用Worksheet.values属性遍历工作表中的所有行,但只返回单元格值:

forrowinws.values:forvalueinrow:print(value)

Worksheet.iter_rows()Worksheet.iter_cols()可以设置values_only参数来仅返回单元格的值:

>>>forrowinws.iter_rows(min_row=1,max_col=3,max_row=2,values_only=True):...print(row)(None,None,None)(None,None,None)

NO.1

往期推荐

Historical articles

最强 Python 数据可视化库,没有之一!

用Python绘制了若干张词云图,惊艳了所有人

精心制作了一期用Python操作MySQL的使用教程集锦!!

用 SQL 做数据分析的十大常用功能,附面试原题解答!!

长按👇关注- 关于数据分析与可视化-设为星标,干货速递

分享、收藏、点赞、在看安排一下?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。