各种数据需要导入Excel?多个Excel要合并?目前,Python处理Excel文件有很多库,openpyxl算是其中功能和性能做的比较好的一个。接下来我将为大家介绍各种Excel操作。
新建一个Excel文件
>>>fromopenpyxlimportWorkbook>>>wb=Workbook()打开现有Excel文件
>>>fromopenpyxlimportload_workbook>>>wb2=load_workbook('test.xlsx')打开大文件时,根据需求使用只读或只写模式减少内存消耗。
wb=load_workbook(filename='large_file.xlsx',read_only=True)wb=Workbook(write_only=True)2、获取、创建工作表获取当前活动工作表:
>>>ws=wb.active创建新的工作表:
>>>ws1=wb.create_sheet("Mysheet")#insertattheend(default)#or>>>ws2=wb.create_sheet("Mysheet",0)#insertatfirstposition#or>>>ws3=wb.create_sheet("Mysheet",-1)#insertatthepenultimateposition使用工作表名字获取工作表:
>>>ws3=wb["NewTitle"]获取所有的工作表名称:
>>>print(wb.sheetnames)['Sheet2','NewTitle','Sheet1']使用for循环遍历所有的工作表:>>>forsheetinwb:...print(sheet.title)3、保存保存到流中在网络中使用:
>>>fromtempfileimportNamedTemporaryFile>>>fromopenpyxlimportWorkbook>>>wb=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=True>>>wb.save('document_template.xltx')4、单元格单元格位置作为工作表的键直接读取:
>>>c=ws['A4']为单元格赋值:
>>>ws['A4']=4>>>c.value='hello,world'多个单元格可以使用切片访问单元格区域:
>>>cell_range=ws['A1':'C2']使用数值格式:
>>>#setdateusingaPythondatetime>>>ws['A1']=datetime.datetime(2010,7,21)>>>>>>ws['A1'].number_format'yyyy-mm-ddh:mm:ss'使用公式:
>>>#addasimpleformula>>>ws["A1"]="=SUM(1,1)"合并单元格时,除左上角单元格外,所有单元格都将从工作表中删除:
>>>ws.merge_cells('A2:D2')>>>ws.unmerge_cells('A2:D2')>>>>>>#orequivalently>>>ws.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)5、行、列可以单独指定行、列、或者行列的范围:
>>>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)
>>>forcolinws.iter_cols(min_row=1,max_col=3,max_row=2):...forcellincol:...print(cell)
>>>ws=wb.active>>>ws['C9']='helloworld'>>>tuple(ws.rows)((,,),(,,),(,,),(,,),(,,),(,,),(,,),(,,),(,,))或Worksheet.columns属性:
>>>tuple(ws.columns)((
>>>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()用来批量删除行和列。6、只读取值使用Worksheet.values属性遍历工作表中的所有行,但只返回单元格值:
forrowinws.values:forvalueinrow:print(value)Worksheet.iter_rows()和Worksheet.iter_cols()可以设置values_only参数来仅返回单元格的值: