|
上文提供了Excel文件讀寫操作的基本模板,本文進(jìn)一步詳解這兩個(gè)模塊的功能。
一、Book(class) 由xlrd.open_work(“example.xls”)返回
- nsheets: sheets數(shù)
- sheet_names: sheet名稱列表
- sheets: sheet列表
- sheet_by_index(sheetx): 按序號(hào)提取sheet
- sheet_by_name(sheet_name): 按名稱提取sheet
二、Sheet(class) 由Book object相關(guān)方法返回
- name:sheet名
- nrows: 行數(shù)
- ncols: 列數(shù)
- cell(rowx,colx):第rows行colx列的單元格
- cell_type(rowx,colx): 數(shù)據(jù)類型
- cell_value(rows,colx): 數(shù)值
- col(colx): 第colx列所有單元格組成的列表
- col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格組成的列表
- col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格數(shù)值類型組成的列表
- col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定單元格數(shù)值組成的列表
- row同樣有col的各項(xiàng)操作,此處略去
三、Cell(class) 由Sheet object(s)相關(guān)方法返回
四、xlrd模塊使用詳解 1、導(dǎo)入模塊
In [1]: import xlrd
2、打開Excel文件讀取數(shù)據(jù)
In [2]: data = xlrd.open_workbook('sample.xls')
In [3]: data
Out[3]: <xlrd.book.Book at 0x21df9f4a198>
3、使用技巧
# 獲取一個(gè)工作表,index_number表示表的索引號(hào),索引號(hào)從0開始,表示第一張表,1表示第二張表,依次類似。
# table = data.sheets()[index_number]
# 1、通過索引順序獲取
In [4]: tables = data.sheets()
In [5]: tables
Out[5]: [<xlrd.sheet.Sheet at 0x21df9f5bcc0>]
In [6]: tables[0]
Out[6]: <xlrd.sheet.Sheet at 0x21df9f5bcc0>
#若果有兩個(gè)表格的情況,sheets會(huì)得到兩個(gè)表的地址
In [7]: data2 = xlrd.open_workbook('sample2.xls')
In [9]: data2.sheets()
Out[9]: [<xlrd.sheet.Sheet at 0x21df9f62fd0>, <xlrd.sheet.Sheet at 0x21df9f62f98>]
#table = data.sheet_by_index(index_number)
#2、通過索引順序獲取,index_number表示表的索引號(hào),索引號(hào)從0開始,表示第一張表,1表示第二張表,依次類似。
In [10]: data2.sheet_by_index(0)
Out[10]: <xlrd.sheet.Sheet at 0x21df9f62fd0>
3、table = data.sheet_by_name(sheet_name)
#通過名稱獲取,sheet_name表示工作表的名字,但是需要注意的是這個(gè)表明的字符串需要使用Unicode的字符串,如:u'xxx'
In [11]: data2.sheet_by_name('sample')
Out[11]: <xlrd.sheet.Sheet at 0x21df9f62fd0>
獲取整行和整列的值(數(shù)組)
#獲取行的值
#table.row_values(row_index)
In [12]: table = data2.sheet_by_name('sample')
In [13]: table.row_values(0)
Out[13]: ['netcon', 'conw.net']
#獲取列的值
#table.col_values(i)
In [14]: table.col_values(0)
Out[14]: ['netcon']
獲取行數(shù)和列數(shù)
#獲取行數(shù)
#nrows = table.nrows
In [16]: table.nrows
Out[16]: 1
#獲取列數(shù)
#ncols = table.ncols
In [17]: table.ncols
Out[17]: 2
循環(huán)行列表數(shù)據(jù)
In [18]: for i in range(table.nrows):
...: print(table.row_values(i))
...:
['netcon', 'conw.net']
單元格
#根據(jù)行列的位置去單元格的數(shù)據(jù)
In [19]: cell_a1 = table.cell(0,0)
In [20]: cell_a1
Out[20]: text:'netcon'
In [21]: cell_a1.dump
Out[21]: <bound method BaseObject.dump of text:'netcon'>
#取出單元格的數(shù)值
In [22]: cell_a1.value
Out[22]: 'netcon'
使用行列索引
#通過行進(jìn)行數(shù)據(jù)的獲取
In [23]: cell_A1 = table.row(0)
In [24]: cell_A1
Out[24]: [text:'netcon', text:'conw.net']
In [25]: cell_A1[0]
Out[25]: text:'netcon'
In [27]: cell_A1[0].value
Out[27]: 'netcon'
#通過列進(jìn)行數(shù)據(jù)的獲取
In [28]: cell_A1 = table.col(0)[0].value
In [29]: cell_A1
Out[29]: 'netcon'
簡(jiǎn)單的寫入
row = 0
col = 0
# 類型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1
value = '單元格的值'
xf = 0 # 擴(kuò)展的格式化
#將‘單元格的’寫入到Excel中,使用put_cell寫入
In [31]: table.put_cell(1,1,1,'單元格的',0)
In [32]: table.cell(1,1).value
Out[32]: '單元格的'
|