【python】解析Excel中使用xlrd库、xlwt库操作,读取Excel文件详解(一)

上文提供了Excel文件读写操作的基本模板,本文进一步详解这两个模块的功能。

一、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模块使用详解
1、导入模块

In [1]: import xlrd

2、打开Excel文件读取数据

In [2]: data = xlrd.open_workbook('sample.xls')In [3]: dataOut[3]: <xlrd.book.Book at 0x21df9f4a198>

3、使用技巧

# 获取一个工作表,index_number表示表的索引号,索引号从0开始,表示第一张表,1表示第二张表,依次类似。# table = data.sheets()[index_number]          # 1、通过索引顺序获取In [4]: tables = data.sheets()In [5]: tablesOut[5]: [<xlrd.sheet.Sheet at 0x21df9f5bcc0>]In [6]: tables[0]Out[6]: <xlrd.sheet.Sheet at 0x21df9f5bcc0>#若果有两个表格的情况,sheets会得到两个表的地址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表示表的索引号,索引号从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表示工作表的名字,但是需要注意的是这个表明的字符串需要使用Unicode的字符串,如:u'xxx'In [11]: data2.sheet_by_name('sample')Out[11]: <xlrd.sheet.Sheet at 0x21df9f62fd0>

获取整行和整列的值(数组)

#获取行的值#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']

获取行数和列数  

#获取行数#nrows = table.nrows In [16]: table.nrowsOut[16]: 1#获取列数#ncols = table.ncolsIn [17]: table.ncolsOut[17]: 2

循环行列表数据

In [18]: for i in range(table.nrows):    ...:     print(table.row_values(i))    ...:['netcon', 'conw.net']

单元格

#根据行列的位置去单元格的数据In [19]: cell_a1 = table.cell(0,0)In [20]: cell_a1Out[20]: text:'netcon'In [21]: cell_a1.dumpOut[21]: <bound method BaseObject.dump of text:'netcon'>#取出单元格的数值In [22]: cell_a1.valueOut[22]: 'netcon'

使用行列索引

#通过行进行数据的获取In [23]: cell_A1 = table.row(0)In [24]: cell_A1Out[24]: [text:'netcon', text:'conw.net']In [25]: cell_A1[0]Out[25]: text:'netcon'In [27]: cell_A1[0].valueOut[27]: 'netcon'#通过列进行数据的获取In [28]: cell_A1 = table.col(0)[0].valueIn [29]: cell_A1Out[29]: 'netcon'

简单的写入

row = 0col = 0# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 errorctype = 1 value = '单元格的值'xf = 0 # 扩展的格式化#将‘单元格的’写入到Excel中,使用put_cell写入In [31]: table.put_cell(1,1,1,'单元格的',0)In [32]: table.cell(1,1).valueOut[32]: '单元格的'
(0)

相关推荐