這篇文章主要探討python處理表格的方法。有一定的參考價(jià)值,有需要的朋友可以參考一下,跟隨小編一起來(lái)看解決方法吧。
創(chuàng)新互聯(lián)專(zhuān)注于南譙網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供南譙營(yíng)銷(xiāo)型網(wǎng)站建設(shè),南譙網(wǎng)站制作、南譙網(wǎng)頁(yè)設(shè)計(jì)、南譙網(wǎng)站官網(wǎng)定制、重慶小程序開(kāi)發(fā)服務(wù),打造南譙網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南譙網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
python操作excel主要用到xlrd和xlwt這兩個(gè)庫(kù),即xlrd是讀excel,xlwt是寫(xiě)excel的庫(kù)。可從這里下載https://pypi.python.org/pypi。下面分別記錄python讀和寫(xiě)excel。
Python寫(xiě)excel——xlwt
Python寫(xiě)excel的難點(diǎn)不在構(gòu)造一個(gè)workbook的本身,而是填充的數(shù)據(jù),不過(guò)這不在范圍內(nèi)。在寫(xiě)excel的操作中也有棘手的問(wèn)題,比如寫(xiě)入合并的單元格就是比較麻煩的,另外寫(xiě)入還有不同的樣式。
詳細(xì)代碼如下:
import xlwt #設(shè)置表格樣式 def set_style(name,height,bold=False): style = xlwt.XFStyle() font = xlwt.Font() font.name = name font.bold = bold font.color_index = 4 font.height = height style.font = font return style #寫(xiě)Excel def write_excel(): f = xlwt.Workbook() sheet1 = f.add_sheet('學(xué)生',cell_overwrite_ok=True) row0 = ["姓名","年齡","出生日期","愛(ài)好"] colum0 = ["張三","李四","戀習(xí)Python","小明","小紅","無(wú)名"] sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True)) #寫(xiě)第一列 for i in range(0,len(colum0)): sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True)) sheet1.write(1,3,'2006/12/12') sheet1.write_merge(6,6,1,3,'未知')#合并行單元格 sheet1.write_merge(1,2,3,3,'打游戲')#合并列單元格 sheet1.write_merge(4,5,3,3,'打籃球') f.save('test.xls') if __name__ == '__main__': write_excel()
結(jié)果圖:
在此,對(duì)write_merge()的用法稍作解釋?zhuān)缟鲜觯簊heet1.write_merge(1,2,3,3,'打游戲'),即在四列合并第2,3列,合并后的單元格內(nèi)容為"合計(jì)",并設(shè)置了style。其中,里面所有的參數(shù)都是以0開(kāi)始計(jì)算的。
Python讀excel——xlrd
Python讀取Excel表格,相比xlwt來(lái)說(shuō),xlrd提供的接口比較多,但過(guò)程也有幾個(gè)比較麻煩的問(wèn)題,比如讀取日期、讀合并單元格內(nèi)容。
下面先看看基本的操作:
整體思路為,打開(kāi)文件,選定表格,讀取行列內(nèi)容,讀取表格內(nèi)數(shù)據(jù)
詳細(xì)代碼如下:
import xlrd from datetime import date,datetime file = 'test3.xlsx' def read_excel(): wb = xlrd.open_workbook(filename=file)#打開(kāi)文件 print(wb.sheet_names())#獲取所有表格名字 sheet1 = wb.sheet_by_index(0)#通過(guò)索引獲取表格 sheet2 = wb.sheet_by_name('年級(jí)')#通過(guò)名字獲取表格 print(sheet1,sheet2) print(sheet1.name,sheet1.nrows,sheet1.ncols) rows = sheet1.row_values(2)#獲取行內(nèi)容 cols = sheet1.col_values(3)#獲取列內(nèi)容 print(rows) print(cols) print(sheet1.cell(1,0).value)#獲取表格里的內(nèi)容,三種方式 print(sheet1.cell_value(1,0)) print(sheet1.row(1)[0].value)
運(yùn)行結(jié)果如下:
那么問(wèn)題來(lái)了,上面的運(yùn)行結(jié)果中紅框框中的字段明明是出生日期,可顯示的確實(shí)浮點(diǎn)數(shù);同時(shí)合并單元格里面應(yīng)該是有內(nèi)容的,結(jié)果不能為空。
別急,我們來(lái)一一解決這兩個(gè)問(wèn)題:
1.python讀取excel中單元格內(nèi)容為日期的方式
python讀取excel中單元格的內(nèi)容返回的有5種類(lèi)型,即上面例子中的ctype:
ctype : 0 empty,1 string,2 number, 3 date,4 boolean,5 error
即date的ctype=3,這時(shí)需要使用xlrd的xldate_as_tuple來(lái)處理為date格式,先判斷表格的ctype=3時(shí)xldate才能開(kāi)始操作。
詳細(xì)代碼如下:
import xlrd from datetime import date,datetime print(sheet1.cell(1,2).ctype) date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode) print(date_value) print(date(*date_value[:3])) print(date(*date_value[:3]).strftime('%Y/%m/%d'))
2.獲取合并單元格的內(nèi)容
在操作之前,先介紹一下merged_cells()用法,merged_cells返回的這四個(gè)參數(shù)的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一樣,即(1, 3, 4, 5)的含義是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含義是:第2到4列合并。
詳細(xì)代碼如下:
print(sheet1.merged_cells)print(sheet1.cell_value(1,3)) print(sheet1.cell_value(4,3)) print(sheet1.cell_value(6,1))
發(fā)現(xiàn)規(guī)律了沒(méi)?是的,獲取merge_cells返回的row和col低位的索引即可! 于是可以這樣批量獲?。?/p>
詳細(xì)代碼如下:
merge = [] print(sheet1.merged_cells) for (rlow,rhigh,clow,chigh) in sheet1.merged_cells: merge.append([rlow,clow]) for index in merge: print(sheet1.cell_value(index[0],index[1]))
運(yùn)行結(jié)果跟上圖一樣,如下:
關(guān)于python處理表格的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。