Python 讀取Excel之xlrd篇

上一期給大家分享了如何用Python讀取文本,這次給大家分享如何讀取Excel表格內容,拿最常見的.xlsx和.xls格式來講解。

本章主要知識點有:

  1. 讀取整篇excel返回list[list[list]] 格式
  2. 讀取指定sheet頁內容返回list[list[]] 格式
  3. 讀取任意一行或一列返回list[] 格式

正文:

讀取Excel有多種方法,本章採用比較通用的xlrd庫來實現,先讀取文件,再指定到某sheet頁進行讀取

data = xlrd.open_workbook(filename)
table = data.sheet_by_name(sheetName)

如上程式碼中,將sheet頁賦給了table變數,再根據table頁的總行數和總列數,逐個輸出單元格的內容

# 獲取總行數和總列數
tRows = table.nrows
tCols = table.ncols

#獲取某個單元格的內容
table.cell(r,c).value

結合以上資訊,可以完整的輸出讀取sheet頁內容的函數,並輸出list格式

 1 def readBySheet(self, sheetName : str) -> list:
 2     data = xlrd.open_workbook(self.files)
 3 
 4     # get table cont by sheet name
 5     table = data.sheet_by_name(sheetName)
 6 
 7     tRows = table.nrows
 8     tCols = table.ncols
 9 
10     # read Excel
11     res = []
12     for r in range(tRows):
13         rescol = []
14         for c in range(tCols):
15             rescol.append(table.cell(r,c).value)
16         res.append(rescol)
17     return res

既然都可以輸出某sheet頁的內容了,那麼讀取整篇excel 的內容,只要知道所有sheet頁的名稱即可,xlrd庫也提供了這樣一種方法 data.sheet_names(),即輸出seheet頁的列表,結合以上程式碼,那麼讀取整篇excel的方法實現如下

1 def read(self) -> list:
2     data = xlrd.open_workbook(self.files)
3     tablelist = data.sheet_names()
4 
5     res = []
6     for name in tablelist:
7         res.append(self.readBySheet(name))
8     return res

擴展:

在開發項目中,有時並不需要讀取整個table頁的內容,或許只需要某一列或某一行的值,其實xlrd早就考慮到了,使用 table.row_values(row)和table.col_values(col),其中row 和 col 為行和列index,小編也將其封裝好了,方便讀者直接調用

1 def readAnyRows(self, sheetName : str, row : int) -> list:
2     data = xlrd.open_workbook(self.files)
3     table = data.sheet_by_name(sheetName)
4     return table.row_values(row) if table.nrows > row else 'row out of range'
5 
6 def readAnyCols(self, sheetName : str, col : int) -> list:
7     data = xlrd.open_workbook(self.files)
8     table = data.sheet_by_name(sheetName)
9     return table.col_values(col) if table.ncols > col else 'col out of range'

了解了以上幾種方法,我相信在處理表格場景時都可以遊刃有餘。建議封裝成模組,方便循環使用。如果想要現成的模組,評論+關注私信我,留下郵箱並回復關鍵詞「excel」,我會第一時間發給你的哦。

後續我會介紹其他讀取excel的方式,譬如openpyxl,pandas等,關注我,你會對Python越來越有興趣!