Python openpyxl模块原理及用法解析
这篇文章主要介绍了Pythonopenpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
此模块不是Python内置的模块需要安装,安装方法如下
pipinstallopenpyxl
注意:
此模块只支持offce2010,即是电子表格后缀是*.xlsx
1、openpyxl模块常用函数
importopenpyxl wb=openpyxl.load_workbook('example.xlsx') #####工作表常用操作 print(wb.active)#获取电子表格Worksheet是否有数据 print(wb.read_only)#是否是以只读方式打开 print(wb.encoding)#获取电子表格的编码 print('',wb.properties)#获取电子表格属性如:标题、作者、创建时间等 print(wb.worksheets)#获取工作表名 print(wb.get_sheet_names())#获取工作表的所有名字 print(wb.sheetnames)#获取工作表的所有名字跟wb.get_sheet_names()一样的功能 print(wb.get_sheet_by_name('Sheet1'))#通过工作表的名字,获取Worksheet对象操作电子表格 print(wb.create_sheet('python创建的工作表'))#创建的工作表,记得用save保存,才保存到硬盘上 print(wb.copy_worksheet(wb['Sheet1']))#复制工作表 ####工作表的常用操作 sheet1_obj=wb['Sheet1'] print(sheet1_obj.title)#工作表的标题 print(sheet1_obj.dimensions)#获取表格大小,返回格式如:A1:D6 print(sheet1_obj.max_row)#表格最大行数 print(sheet1_obj.min_row)#表格最小行数 print(sheet1_obj.max_column)#表格最大列数 print(sheet1_obj.min_column)#表格最小列数 print(sheet1_obj.rows)#按行获取单元格(Cell对象) print(sheet1_obj.columns)#按列获取单元格(Cell对象) print(sheet1_obj.freeze_panes)#冻结窗格 print(sheet1_obj.values)#按行获取表格的内容(数据) print(sheet1_obj.iter_rows())#迭代器方式,按行获取所有单元格(Cell对象) print(sheet1_obj.iter_columns())#迭代器方式,按列获取所有单元格(Cell对象) sheet1_obj.append(['1列','2列','3列','4列'])#往工作表最后一行插入多列数据 ####单元格的常用操作 sheet1_obj.merged_cells#合并单元格 sheet1_obj.unmerge_cells#取消合并单元格 print(sheet1_obj['A2'].row)#获取行数 print(sheet1_obj['A2'].column)#获取列数 print(sheet1_obj['B1'].value)#获取单元格的值 wb.save('example.xlsx')#保存单元格
2、利用openpyxl模块创建一张电子表格
#!/usr/bin/envpython #-*-coding:utf-8-*- fromopenpyxlimportWorkbook wb=Workbook() #print(wb.get_sheet_names())#获取工作表的名字 ws=wb.get_sheet_by_name('Sheet')#获取Sheet工作表对象 #print(ws.title)#获取工作表的标题 ws.title='Student'#设置新的工作表 #设置内容 ws['A1']='HelloWorld' importdatetime ws['A2']=datetime.datetime.now() wb.save('new_sample.xlsx')
运行效果
3、利用openpyxl模块对电子表格运算操作(求和数、平均数)
表格例子如下:
#!/usr/bin/envpython #-*-coding:utf-8-*- importopenpyxl fromopenpyxl.stylesimportAlignment defprocess_worksheet(sheet): avg_column=sheet.max_column+1#平均数,存放在最后一列 sum_column=sheet.max_column+2#求和,存放在最后第二列 forrowinsheet.iter_rows(min_row=2,min_col=2): scores=[cell.valueforcellinrow]#获取一行的值 sum_score=sum(scores)#求一行的和 avg_score=sum_score/len(scores)#求一行的平均数 avg_cell=sheet.cell(row=row[0].row,column=avg_column) sum_cell=sheet.cell(row=row[0].row,column=sum_column) avg_cell.value=avg_score#定位到单元格,设置总分 sum_cell.value=sum_score#定位到单元格,设置平均分 #设置对齐方式,水平是右对齐,垂直是居中 align=Alignment(horizontal='left',vertical='center',wrap_text=True) avg_cell.alignment=align sum_cell.alignment=align #设置平均分和总分的标题 sheet.cell(row=1,column=avg_column).value='平均分' sheet.cell(row=1,column=sum_column).value='总分' defmain(): wb=openpyxl.load_workbook('example.xlsx') sheet=wb.get_sheet_by_name('Sheet1') process_worksheet(sheet) wb.save('example.xlsx') if__name__=='__main__': main()
运行效果
4、多张电子表格合并为一张电子表格
准备3张电子表格
员工1.xlsx
员工2.xlsx
员工3.xlsx
#!/usr/bin/envpython #-*-coding:utf-8-*- importopenpyxl importglob importos defmerge_xlsx_files(xlsx_files): wb=openpyxl.load_workbook(xlsx_files[0])#打开第一张电子表格 ws=wb.active#激活worksheet ws.title='mergedresult'#合并结果 forfilenameinxlsx_files[1:]: workbook=openpyxl.load_workbook(filename) sheet=workbook.active#激活worksheet forrowinsheet.iter_rows(min_row=2):#从第二行开启迭代 values=[cell.valueforcellinrow]#返回一列的值,以列表类型 ws.append(values)#把列表增加到新的表格里面 returnwb defget_all_xlsx_files(path): """指定后缀名,获取所有跟后缀相关的文件类型,返回列表""" xlsx_files=glob.glob(os.path.join(path,'*.xlsx')) sorted(xlsx_files,key=str.lower)#排序 returnxlsx_files defmain(): path=os.path.join(os.path.dirname(os.getcwd()),'临时测试','excels')#目录自行配置 xlsx_files=get_all_xlsx_files(path) wb=merge_xlsx_files(xlsx_files) wb.save('merge_data.xlsx')#保存数据到硬盘 if__name__=='__main__': main()
运行效果(硬盘多出一张电子表格merge_data.xlsx)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。