什么是xlrd模塊?
♦python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。
♦python讀取excel中單元格的內容返回的有5種類型:
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
相關方法介紹

Book(class) 由xlrd.open_work("example.xls")返回 nsheets: sheets數 sheet_names: sheet名稱列表 sheets: sheet列表 sheet_by_index(sheetx): 按序號提取sheet sheet_by_name(sheet_name): 按名稱提取sheet Sheet(class) 由Book object相關方法返回 name: sheet名 nrows: 行數 ncols: 列數 cell(rowx,colx): 第rows行colx列的單元格 cell_type(rowx,colx): 數據類型 cell_value(rows,colx): 數值 col(colx): 第colx列所有單元格組成的列表 col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格組成的列表 col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格數值類型組成的列表 col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格數值組成的列表 row同樣有col的各項操作,此處略去 Cell(class) 由Sheet object(s)相關方法返回 ctype: 一個int型變量,對應不同的數值類型 value: 單元格的值
一、安裝xlrd模塊
♦ 到python官網下載http://pypi.python.org/pypi/xlrd模塊安裝,前提是已經安裝了python 環境。
♦或者在cmd窗口 pip3 install xlrd
二、使用介紹
1、常用單元格中的數據類型
2、導入模塊
import xlrd
3、打開Excel文件讀取數據
data = xlrd.open_workbook(filename)#文件名以及路徑,如果路徑或者文件名有中文給前面加一個r拜師原生字符。
4、常用的函數
♦ excel中最重要的方法就是book和sheet的操作
1)獲取book中一個工作表
table = data.sheets()[0] #通過索引順序獲取 table = data.sheet_by_index(sheet_indx)) #通過索引順序獲取 table = data.sheet_by_name(sheet_name)#通過名稱獲取 以上三個函數都會返回一個xlrd.sheet.Sheet()對象 names = data.sheet_names() #返回book中所有工作表的名字 data.sheet_loaded(sheet_name or indx) # 檢查某個sheet是否導入完畢
如:
2)行的操作
nrows = table.nrows #獲取該sheet中的有效行數 table.row(rowx) #返回由該行中所有的單元格對象組成的列表 table.row_slice(rowx) #返回由該列中所有的單元格對象組成的列表 table.row_types(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據類型組成的列表 table.row_values(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據組成的列表 table.row_len(rowx) #返回該列的有效單元格長度
3)列(colnum)的操作
ncols = table.ncols #獲取列表的有效列數 table.col(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表 table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表 table.col_types(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據類型組成的列表 table.col_values(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據組成的列表
如:
table.cell(rowx,colx) #返回單元格對象 table.cell_type(rowx,colx) #返回單元格中的數據類型 table.cell_value(rowx,colx) #返回單元格中的數據 table.cell_xf_index(rowx, colx) # 暫時還沒有搞懂
♦單元格:單元格是表格中行與列的交叉部分,它是組成表格的最小單位,可拆分或者合並。單個數據的輸入和修改都是在單元格中進行的
如:
注意:注意作用域問題,之前獲取的sheet之后,都在獲取到這個sheet值后,在進行,行和列以及單元格的操作。
問題現象:
問題一:
♦1、使用open()函數、xlrd.open_workbook()函數打開文件,文件名若包含中文,會報錯找不到這個文件或目錄。
♦2、獲取sheet時若包含中文,也會報錯。
#打開文件 file = open(filename,'rb') #打開excel文件 workbook = xlrd.open_workbook(filename) #獲取sheet sheet = workbook.sheet_by_name(sheetname)
解決方案:
♦對參數進行轉碼即可。如:
filename = filename.decode('utf-8')
♦也試過unicode函數,不過,在ride中運行時出現了報錯,所以不贊成使用。
filename = unicode(filename,'utf-8')
問題二;
問題描述: python讀取excel中單元格內容為日期時,字段里明明是日期,可讀取后顯示的卻是浮點數。
♦python讀取excel中單元格的內容返回的有5種類型:
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
1.判斷類型演示:
>>> sheet2.cell(2,2).ctype #1990/2/22 3 >>> sheet2.cell(2,1).ctype #18 2 >>> sheet2.cell(2,0).ctype #測試 1 >>> sheet2.cell(2,4).ctype #空值(這里是合並單元格的原因) 0
2。解決浮點數問題,正確取值方式: >>> sheet2.cell(2,2).value #1990/2/22 33656.0 >>> xlrd.xldate_as_tuple(sheet2.cell_value(2,2),workbook.datemode) (1992, 2, 22, 0, 0, 0) >>> date_value =xlrd.xldate_as_tuple(sheet2.cell_value(2,2),workbook.datemode) >>> date_value (1992, 2, 22, 0, 0, 0) >>> date(*date_value[:3]) datetime.date(1992, 2, 22) >>> date(*date_value[:3]).strftime('%Y/%m/%d') '1992/02/22'
即可以做下簡單處理,判斷ctype是否等於3,如果等於3,則用時間格式處理:
if (sheet.cell(row,col).ctype == 3): date_value = xlrd.xldate_as_tuple(sheet.cell_value(rows,3),book.datemode) date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
問題三:
問題描述:讀取合並單元格內容中內容sheet2.cell(2,4).ctype返回的值是0,說明這個單元格的值是空值,這就是這個包不完善的地方,如果是合並單元格那么應該合並的單元格內容一樣,但是它只是合並的第一個單元格有值,其它為空。
解決辦法:通過獲取merge_cells返回的row和col低位的索引來判斷哪些是合並單元格,然后做后續取值操作。
讀取文件的時候需要將formatting_info參數設置為True,默認是False,所以上面獲取合並的單元格數組為空,
詳細查看該鏈接:https://www.cnblogs.com/zhoujie/p/python18.html
2.為什么使用xlrd模塊?
♦在UI自動化或者接口自動化中數據維護是一個核心,所以此模塊非常實用。
3.怎樣使用xlrd模塊?
讀取表格數據樣例:https://www.cnblogs.com/iamjianghao/p/10764473.html
python selenium中Excel數據維護:https://www.cnblogs.com/insane-Mr-Li/p/9093212.html