Python讀寫(xiě)Excel表格

Python讀寫(xiě)Excel表格,就是這么簡(jiǎn)單粗暴又好用

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ú)名"]

 #寫(xiě)第一行

 for i in range(0,len(row0)):

 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é)果圖:

image

在此,對(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)容。

下面先看看基本的操作:

image

圖表數(shù)據(jù)

整體思路為,打開(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é)果如下:

image

那么問(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'))
image

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))
image

**發(fā)現(xiàn)規(guī)律了沒(méi)?****是的,獲取merge_cells返回的row和col低位的索引即可! **于是可以這樣批量獲取:

詳細(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é)果跟上圖一樣,如下:

image

Python讀寫(xiě)Excel表格,就是這么簡(jiǎn)單粗暴又好用,如果覺(jué)得不錯(cuò),對(duì)你工作中有幫助,動(dòng)動(dòng)手指分享給更多人

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在做一些數(shù)據(jù)處理和計(jì)算的工作,因?yàn)閿?shù)據(jù)是以.CSV格式保存的,因此剛開(kāi)始直接用Excel來(lái)處理。 但是做著做著...
    何苦_python_java閱讀 1,271評(píng)論 0 3
  • 最近遇到一個(gè)情景,就是定期生成并發(fā)送服務(wù)器使用情況報(bào)表,按照不同維度統(tǒng)計(jì),涉及python對(duì)excel的操作,上網(wǎng)...
    有料美拓閱讀 2,560評(píng)論 0 0
  • >最近遇到一個(gè)情景,就是定期生成并發(fā)送服務(wù)器使用情況報(bào)表,按照不同維度統(tǒng)計(jì),涉及python對(duì)excel的操作,上...
    有料美拓閱讀 7,135評(píng)論 0 0
  • 參考文章:Python使用openpyxl讀寫(xiě)excel文件 安裝:使用管理員模式進(jìn)行pip下載安裝pip ins...
    五秋木閱讀 6,657評(píng)論 0 0
  • (孩堤~百臉孩堤)云開(kāi)甘露潤(rùn)花枝,青青綠柳隨風(fēng)飄。繁花錦簇枝頭翠,枝頭燕語(yǔ)愛(ài)吱吱。孩童嬉戲耍打鬧,游園童樂(lè)任性知。...
    甘朝武閱讀 437評(píng)論 0 0

友情鏈接更多精彩內(nèi)容