您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > Python execl介绍
13.3读写Excel文件本节介绍如何使用xlrd,xlwt库读写Excel文件,使用这些库的好处在于它不需要使用COM接口驱动MicrosoftExcel,也就是说你不需要安装微软的Office套件也可以操作Excel文件。xlrd库的下载地址:库的下载地址:库的下载地址:英文帮助文档:文件。和Excel文档的结构类似,一个Excel文件对应一个xlwt.Workbook对象,我们通过操作此对象修改Excel文档的内容,最后调用其save方法将文档保存成文件。通过操作Workbook对象我们可以创建如下的对象:?WorkSheet:通过Workbook.add_sheet方法创建WorkSheet对象,或者通过get_sheet方法获取已经存在的WorkSheet对象。?Row:使用Worksheet.row方法创建或者获取一行?Column:使用Worksheet.col方法创建或者获取一列13.3读写Excel文件295用Python做科学计算babyself1987@gmail.com试读版?Cell:通过Worksheet.write或者Row.write方法可以直接写某个单元格下面是一个简单的例子:?write_xls.py演示写Excel文件1#-*-coding:utf-8-*-2importnumpyasnp3fromxlwtimport*45book=Workbook()6sheet1=book.add_sheet(u'随机数')7head=[normal,power,gamma,SUM]8N=1009data=np.vstack([10np.random.normal(size=N),11np.random.power(a=1.0,size=N),12np.random.gamma(0.9,size=N)13])14#创建对齐配置15al=Alignment()16al.horz=Alignment.HORZ_CENTER17al.vert=Alignment.VERT_CENTER18#创建边框配置19borders=Borders()20borders.bottom=Borders.THICK21#创建样式22style=XFStyle()23style.alignment=al24style.borders=borders25#获得第0行26row0=sheet1.row(0)27#将标题写入第0行,使用所创建的样式28fori,textinenumerate(head):29row0.write(i,text,style=style)30#写入随机数31fori,lineinenumerate(data):32forj,valueinenumerate(line):33sheet1.write(j+1,i,value)34#写求和公式,注意公式中的单元格下标从1开始计数35foriinxrange(N):36sheet1.row(i+1).set_cell_formula(373,Formula(sum(A%s:C%s)%(i+2,i+2)),calc_flags=1)3839#设置4列的宽度40foriinxrange(4):41sheet1.col(i).width=400042#设置第0行的高度296第13章数据和文件用Python做科学计算babyself1987@gmail.com试读版43sheet1.row(0).height_mismatch=144sheet1.row(0).height=100045book.save(tmp.xls)程序的输出文件如图13.3所示。程序中除了将数组写入Excel文件之外,还演示了各种属性的配置:?通过write方法的style关键字指定单元格的样式,样式的创建比较麻烦,但也很直观,通过分别创建Aligment、Borders等对象配置样式的各个属性,然后创建XFStyle对象引用各种配置?通过创建Formula可以将Excel的公式写入文档?通过设置Row和Column对象的width和height等属性设置行和列的宽度和高度图13.3-用xlwt输出的Excel文件xlwt的Utils子库中有些经常会用的辅助函数:?col_by_name:将列名转换为列的编号,例如将C转换为2?cell_to_rowcol:将单元格的字符串表达变换为行列编号,它返回一个4个元素的元组:(行编号,列编号,行是否为绝对坐标,列是否为绝对坐标)?cell_to_rowcol2:和cell_to_rowcol类似,但是只返回编号信息?rowcol_to_cell:和cell_to_rowcol相反,将编号变换为字符串表达?cellrange_to_rowcol_pair:将字符串表示的范围变换为一个4元元组:(起始行号,起始列号,结束行号,结束列号)?rowcol_pair_to_cellrange:和cellrange_to_rowcol_pair相反下面是几个例子:fromxlwtimportUtilsUtils.cell_to_rowcol(C4)(3,2,False,False)Utils.cell_to_rowcol(C8)(7,2,False,False)13.3读写Excel文件297用Python做科学计算babyself1987@gmail.com试读版Utils.cell_to_rowcol2(C8)(7,2)Utils.cell_to_rowcol($C$8)(7,2,True,True)Utils.rowcol_to_cell(200,100)'CW201'Utils.rowcol_to_cell(200,100,row_abs=True,col_abs=True)'$CW$201'13.3.2读Excel文件读Excel文件需要使用xlrd库,下面的程序读入上节输出的tmp.xls文件,因此请先运行write_xls.py生成tmp.xls之后再运行下面的程序。xlrd不能直接读取xlwd输出的公式单元格,需要先用Excel打开文档并保存之后才能用xlrd计算公式单元格首先我们从xlrd导入打开WorkBook的函数open_workbook,并且用它打开tmp.xls文件。?read_xls.py用xlrd库读取Excel文件fromxlrdimportopen_workbookbook=open_workbook(tmp.xls)接下来可以调用book的属性和方法获得我们所需要的信息:book.nsheets#Sheet数1printbook.sheet_names()[0]#第一个Sheet的名字随机数sheet=book.sheets()[0]#获得第一个Sheet调用sheet的cell,row,col等方法可以读取sheet中指定的单元格、行以及列中的元素。这些方法返回的是Cell对象,如果我们希望直接获得它们的值,可以调用cell_value,row_values和col_values等方法:sheet.cell(0,0)#读取A1的内容text:u'normal'sheet.row(0)#读取第一行的内容[text:u'normal',text:u'power',text:u'gamma',text:u'SUM']#读取第二列的内容,从第二行开始,并对其求和sum(x.valueforxinsheet.col(1,start_rowx=1))50.080880120307619sum(sheet.col_values(1,start_rowx=1))#同上50.080880120307619298第13章数据和文件sheet.cell(1,3)#读取公式单元格的值number:0.41405871399469785如果我们需要读取某个Excel文件,修改其中的某些内容然后再写回Excel文件中去,那么可以使用xlutils库中的copy函数快速完成从xlrd.Book的xlwt.WorkBook的转换复制工作。下面的程序在tmp.xls中添加一些文字,然后写到output.xls文件中去:#coding=utf8fromxlrdimportopen_workbookfromxlutils.copyimportcopyrb=open_workbook('tmp.xls',formatting_info=True)wb=copy(rb)ws=wb.get_sheet(0)ws.write(0,4,u我添加了一些内容)wb.save('output.xls')importxlrdfname=sample.xlsbk=xlrd.open_workbook(fname)shxrange=range(bk.nsheets)try:sh=bk.sheet_by_name(Sheet1)except:printnosheetin%snamedSheet1%fnamereturnNonenrows=sh.nrowsncols=sh.ncolsprintnrows%d,ncols%d%(nrows,ncols)cell_value=sh.cell_value(1,1)printcell_valuerow_list=[]foriinrange(1,nrows):row_data=sh.row_values(i)row_list.append(row_data)importxlrdwb=xlrd.open_workbook('book.xls')#打开文件sheetNames=wb.sheet_names()#查看包含的工作表#获得工作表的两种方法sh=wb.sheet_by_index(0)sh=wb.sheet_by_name(u'Sheet1')#单元格的值cellA1=sh.cell(0,0)cellA1Value=cellA1.value#可以用cell_values(rowIndex,colIndex)替代上边两步,对行,列的操作类似cellA1Value=sh.cell_values(0,0)#对工作表行的操作forrownuminrange(sh.nrows):rowValueList=sh.row_values(rownum)printrowValueList#第一列的值columnValueList=sh.col_values(0)#虽然有put_cell()但是没有感觉有什么用,xlrd主要是用来读excel,如果想写的话有PyExcelerator,以后用到在志之'''在单元格输入一些内容:row=0col=0ctype=1#查看下面value='asdf'xf=0#扩展的格式化(默认是0)sh.put_cell(row,col,ctype,value,xf)sh.cell(0,0)#文本:u'asdf'sh.cell(0,0).value#'asdf'可选的类型ctype:0=empty(空),1=string(字符),2=number(数字),3=date(日期),4=boolean(布尔),5=error(错误)'''
本文标题:Python execl介绍
链接地址:https://www.777doc.com/doc-5085621 .html