1.1、xlrd模組介紹
xlrd:用於讀取Excle資料檔案將返回的資料物件放到記憶體中,然後查詢資料檔案物件的相關資訊。
xlwt:用於在記憶體中生成新的資料檔案物件,處理完成後寫入到Excel資料檔案中。
xlutils:主要的作用就是copy新的檔案物件,在新的資料物件中完成資料處理操作。
注意:在使用 xlrd 讀取 .xlsx 檔案時,由於 xlrd 從版本 2.0.0 開始停止支援 .xlsx 格式,可能會遇到 xlrd.biffh.XLRDError: Excel xlsx file; not supported 的錯誤。
如果需要讀取.xlsx檔案,你可能需要安裝1.2.0版本的xlrd。
1.2、xlrd操作方法彙總
1.2.1、Excel操作
1.2.1.1、開啟檔案
import xlrd
workbook = xlrd.open_workbook('test.xls')
print(workbook) # <xlrd.book.Book object at 0x7f592100ff50>
1.2.1.2、獲取所有的表名
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
# 獲取所有的工作表名
sheet_names = workbook.sheet_names()
print(sheet_names) # ['sdxl', 'hzgg', 'sdyxz', 'TB2018']
# 獲取所有的sheet物件
Sheets = workbook.sheets()
print(Sheets) # [Sheet 0:<sdxl>, Sheet 1:<hzgg>, Sheet 2:<sdyxz>, Sheet 3:<TB2018>]
1.2.1.3、獲取指定的Sheet
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
# 方式一:透過索引選取
sheet1 = workbook.sheets()[0]
print(sheet1 ) # Sheet 0:<sdxl>
# 方式二:透過索引選取
sheet2 = workbook.sheet_by_index(2)
print(sheet2) # Sheet 2:<sdyxz>
# 方式三:透過表名選取,返回一個<class 'xlrd.sheet.Sheet'>物件
sheet = workbook.sheet_by_name("hzgg")
print(sheet) # Sheet 1:<hzgg>
1.2.1.4、某個sheet是否匯入完畢
# 透過索引,檢查某個sheet是否匯入完畢
print(workbook.sheet_loaded(0)) # True
# 透過檔名,檢查某個sheet是否匯入完畢
print(workbook.sheet_loaded("hzgg")) # True
1.2.2、sheet物件的基本操作
1.2.2.1、sheet錶行操作
1.2.2.1.1、獲取表中所有的行數
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
sheet2 = workbook.sheet_by_name("hzgg")
# 特別注意,這是屬性而不是方法,不加括號
print(sheet2.nrows) # 17
1.2.2.1.2、返回指定行的所有單元格數值組成的列表
1.2.2.1.3、獲取某行的型別及資料
1.2.2.1.4、獲取某行的型別的列表
單元型別ctype:empty為0,string為1,number為2,date為3,boolean為4, error為5(左邊為型別,右邊為型別對應的值)
1.2.2.1.5、以切片形式獲取某行的型別及資料
1.2.2.1.6、獲取某行的長度
1.2.2.1.7、獲取sheet的所有行生成器
1.2.2.2、sheet表列操作
1.2.2.2.1、獲取有效列數
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
sheet2 = workbook.sheet_by_name("hzgg")
# 獲取有效列數
print(sheet2.ncols) # 9
1.2.2.2.2、獲取某列資料
1.2.2.2.3、獲取某列型別
1.2.2.2.4、以切片方式獲取某列型別及資料
1.2.2.3、單元格操作
1.2.2.4、單元格中的日期/時間操作
在使用xlrd讀取excel時,我們常常會遇到日期格式的資料,如果我們不經過任何處理,那麼我們得到會是如 45089.0、45171.0 這樣的excel時間戳。那麼我們該如何讀取呢?這裡介紹倆方法。
1.2.2.4.1、xlrd.xldate_as_tuple(xldate, datemode)
xlrd.xldate_as_tuple(xldate,datemode)
:param xldate: 要處理的單元格值,自然是excel中的日期資料
:param datemode: 使用哪條基準的時間戳(0代表1900-01-01為基準,1代表1904-01-01為基準);常使用1900為基準
返回值:返回一個元組,類似於(year,month,day,hour,minute,nearest_second)
但是,僅適用於date型別的excel單元格,不適用於time型別的單元格,對於time型別的單元格值,報錯:XLDateAmbiguous
1.2.2.4.2、xlrd.xldate.xldate_as_datetime(xldate, datemode)
xlrd.xldate.xldate_as_datetime(xldate,datemode)
:param xldate: 要處理的單元格值,自然是excel中的日期資料
:param datemode: 使用哪條基準的時間戳(0代表1900-01-01為基準,1代表1904-01-01為基準);常使用1900為基準
返回值:datetime物件,格式 year-month-day hour:minute:second
但是,對於time型別的單元格值,轉化後自動以基準補充;如基準選擇1900時,時間 13:09:30 轉化後為:1900-01-01 23:08:00