python里面的xlrd模塊詳解以及樣例


什么是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)   #返回由該列中所有單元格的數據組成的列表
復制代碼

如:

 

      4)單元格的操作  

復制代碼
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

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM