python讀excel——xlrd 一、安裝xlrd模塊 py -3 -m pipinstall xlrd 或者python –mpip install xlrd,,如下圖: 二,、實際操作: 整體思路為à打開文件,,選定表格,讀取行列內(nèi)容,,讀取表格內(nèi)數(shù)據(jù),; 以下圖為例: 1.打開文件: data=xlrd.open_workbook(r'E:\pythonTester\info.xlsx') 2.選定表格: #print (data.sheet_names()) 若有多個工作表,可通過此代碼打印所有表格的名稱 sheet1=data.sheet_by_index(0) #索引讀取 sheet2=data.sheet_by_name('年級') #姓名讀取 sheets=data.sheets()[0] #函數(shù)讀取 3.統(tǒng)計表中的行數(shù),、列數(shù): rows=sheet1.nrows cols=sheet1.ncols 4.打印表格中整行整列的內(nèi)容 print (sheet1.row_values(0)) #打印第一行的內(nèi)容 print (sheet1.col_values(1)) #打印第二列的內(nèi)容 5.讀取表格內(nèi)的數(shù)據(jù) #按單元格讀取 print (sheet1.cell(0,1).value) à第1行第2列中的內(nèi)容 print (sheet1.cell_value(0,1)) #按列讀取 print (sheet1.col_value(1)[0]) à第2列第1行的內(nèi)容 #按行讀取 print (sheet1.row_value(1)[0]) à第2行第1列的內(nèi)容 存在兩個問題:上面的運行結(jié)果中紅框框中的字段明明是出生日期,,可顯示的確實浮點數(shù);同時合并單元格里面應(yīng)該是有內(nèi)容的,,結(jié)果不能為空,。 三、解決問題 1.python讀取excel中單元格內(nèi)容為日期的方式 python讀取excel中單元格的內(nèi)容返回的有5種類型,,即上面例子中的ctype: ctype : 0 empty,,1 string,2 number,, 3 date,,4 boolean,5 error 即date的ctype=3,,這時需要使用xlrd的xldate_as_tuple來處理為date格式,,先判斷表格的ctype=3時xldate才能開始操作。 import xlrd from datetime import date,datetime print (sheet1.cell(1,2).ctype) data_value=xlrd.xldate_as_tuple(sheet1.cell(1,2).value,data.datemode) print (data_value) print (date(*data_value[:3])) print ((date(*data_value[:3])).strftime('%Y%m%d')) 2.獲取合并單元格的內(nèi)容 在操作之前,,先介紹一下merged_cells()用法,,merged_cells返回的這四個參數(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列合并,。 print (sheet1.merged_cells) print (sheet1.cell_value(6,1)) print (sheet1.cell_value(4,3)) 運行結(jié)果如下: 從上面可以發(fā)現(xiàn),獲取merged_cells返回的row和col低位的索引即可,!然后可以批量獲取,,詳細代碼如下: merge=[] for (rlow,rhigh,clow,chigh) in sheet1.merged_cells: merge.append([rlow,clow]) 此時merge為[[6, 1], [4, 3]] for index in merge: #print (index[0],index[1]) #6 1;4 3 print (sheet1.cell_value(index[0],index[1])) 運行結(jié)果如下 |
|