2018-05-04 09:49:49 1794浏览
openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pipinstallopenpyxl安装。fromopenpyxlimportload_workbook #默认可读写,若有需要可以指定write_only和read_only为True wb=load_workbook('codingke.xlsx') 默认打开的文件为可读写,若有需要可以指定参数read_only为True。
#获得所有sheet的名称 print(wb.get_sheet_names()) #根据sheet名字获得sheet a_sheet=wb.get_sheet_by_name('Sheet1') #获得sheet名 print(a_sheet.title) #获得当前正在显示的sheet,也可以用wb.get_active_sheet() sheet=wb.active
#获取某个单元格的值,观察excel发现也是先字母再数字的顺序,即先列再行 b4=sheet['B4'] #分别返回 print(f'({b4.column},{b4.row})is{b4.value}')#返回的数字就是int型 #除了用下标的方式获得,还可以用cell函数,换成数字,这个表示B2 b4_too=sheet.cell(row=4,column=2) print(b4_too.value)
#获得最大列和最大行 print(sheet.max_row) print(sheet.max_column)
heet.rows为生成器,里面是每一行的数据,每一行又由一个tuple包裹。 sheet.columns类似,不过里面是每个tuple是每一列的单元格。 #因为按行,所以返回A1,B1,C1这样的顺序 forrowinsheet.rows: forcellinrow: print(cell.value) #A1,A2,A3这样的顺序 forcolumninsheet.columns: forcellincolumn: print(cell.value)
forcellinlist(sheet.rows)[2]: print(cell.value)
foriinrange(1,4): forjinrange(1,3): print(sheet.cell(row=i,column=j)) #out <Cellpythontab.A1> <Cellpythontab.B1> <Cellpythontab.A2> <Cellpythontab.B2> <Cellpythontab.A3> <Cellpythontab.B3>
forrow_cellinsheet['A1':'B3']: forcellinrow_cell: print(cell) forcellinsheet['A1':'B3']: print(cell) #out (<Cellpythontab.A1>,<Cellpythontab.B1>) (<Cellpythontab.A2>,<Cellpythontab.B2>) (<Cellpythontab.A3>,<Cellpythontab.B3>)
fromopenpyxl.utilsimportget_column_letter,column_index_from_string #根据列的数字返回字母 print(get_column_letter(2))#B #根据字母返回列的数字 print(column_index_from_string('D'))#4
fromopenpyxlimportWorkbook wb=Workbook()
print(wb.get_sheet_names())#提供一个默认名叫Sheet的表,office2016下新建提供默认Sheet1 #直接赋值就可以改工作表的名称 sheet.title='Sheet1' #新建一个工作表,可以指定索引,适当安排其在工作簿中的位置 wb.create_sheet('Data',index=1)#被安排到第二个工作表,index=0就是第一个位置 #删除某个工作表 wb.remove(sheet) delwb[sheet]
#直接给单元格赋值就行 sheet['A1']='good' #B9处写入平均值 sheet['B9']='=AVERAGE(B2:B8)'
#添加一行 row=[1,2,3,4,5] sheet.append(row) #添加多行 rows=[ ['Number','data1','data2'], [2,40,30], [3,40,25], [4,50,30], [5,30,10], [6,25,5], [7,50,10], ]由于append函数只能按行写入。如果我们想按列写入呢。append能实现需求么?如果把上面的列表嵌套看作矩阵。只要将矩阵转置就可以了。使用zip()函数可以实现,不过内部的列表变成了元组就是了。都是可迭代对象,不影响。
list(zip(*rows)) #out [('Number',2,3,4,5,6,7), ('data1',40,40,50,30,25,50), ('data2',30,25,30,10,5,10)]
rows=[ ['Number','data1','data2'], [2,40], [3,40,25], [4,50,30], [5,30,10], [6,25,5], [7,50,10], ] #out [('Number',2,3,4,5,6,7),('data1',40,40,50,30,25,50)]
wb.save(r'D:\example.xlsx')
fromopenpyxl.stylesimportFont,colors,Alignment
bold_itatic_24_font=Font(name='线',size=24,italic=True,color=colors.RED,bold=True) sheet['A1'].font=bold_itatic_24_font
#设置B1中的数据垂直居中和水平居中 sheet['B1'].alignment=Alignment(horizontal='center',vertical='center')
#第2行行高 sheet.row_dimensions[2].height=40 #C列列宽 sheet.column_dimensions['C'].width=30
sheet.unmerge_cells('A1:C3')
以上就是关于扣丁学堂Python基础教程之Excel处理库openpyxl的详细介绍,最后想要了解更多关于Python发展前景趋势,请关注扣丁学堂Python培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供最新的Python视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的Python视频教程课程,让你快速掌握Python从入门到精通开发实战技能。扣丁学堂Python开发工程师技术交流群:279521237
【关注微信公众号获取更多学习资料】