Bootstrap

Python xlrd模块

安装xlrd

 

该模块需要自行安装,直接使用pip安装就能安装

简单使用

测试使用的表格
在这里插入图片描述

1、打开表格文件并获取所有sheet名称

>>> rb = xlrd.open_workbook(r'E:\py-test\tests.xls')
>>> rb.sheet_names()
[u'Sheet1', u'Sheet2', u'Sheet3']

2、获取需要打开的sheet

>>> rb.sheet_names()[0]
u'Sheet1'
>>> rb.sheet_by_index(0)
<xlrd.sheet.Sheet object at 0x000000000447D390>
>>> rb.sheet_by_name('Sheet1')
<xlrd.sheet.Sheet object at 0x000000000447D390>
>>> 

3、获取行数、列数及名称

>>> sheet1 = rb.sheet_by_name('Sheet1')
>>> sheet1.nrows
11
>>> sheet1.ncols
5
>>> sheet1.name
u'Sheet1'
>>> 

4、读取一行、列的值

#获取第一行每个单元格对象  返回列表
>>> sheet1.row(0)
[text:u'cz9025', text:u'B1', text:u'C1', xldate:43421.0]
>>> sheet1.row_values(0)
[u'cz9025', u'B1', u'C1', 43421.0]
#获取第一列每个单元格对象  返回列表
>>> sheet1.col(0)
[text:u'cz9025', text:u'A2', text:u'A3', text:u'A4', text:u'A5', text:u'A6', text:u'A7', text:u'A8', text:u'A9', text:u'A10', text:u'A11']
>>> sheet1.col_values(0)
[u'cz9025', u'A2', u'A3', u'A4', u'A5', u'A6', u'A7', u'A8', u'A9', u'A10', u'A11']
>>> 

5、获取指定单元格的值

>>> sheet1.cell(0, 0).value
u'cz9025'
>>> sheet1.cell_value(0, 0)
u'cz9025'
>>> sheet1.row(0)[0]
text:u'cz9025'
>>> sheet1.row(0)[0].value
u'cz9025'
>>> 

6、单元格类型

ctype 类型值说明: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

>>> sheet1.cell(0, 0).ctype
1

7、获取日期类型的格式

获取表格中的日期 ,先判断是否为日期,否的话会报错

>>> if sheet1.cell(0, 3).ctype == 3:
        date_value = xlrd.xldate_as_tuple(sheet1.cell_value(0, 3), rb.datemode)
        print u'日期=>', date(*date_value[:3])
        print u'格式化日期=>:', date(*date_value[:3]).strftime('%Y/%m/%d')
        dates = xlrd.xldate_as_datetime(sheet1.cell_value(0, 3), rb.datemode)
        print dates.date()

        
日期=> 2018-11-17
格式化日期=>: 2018/11/17
2018-11-17
>>> 

8、获取合并单元格的内容

merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,下标从0开始。这里,需要在读取文件的时候添加个参数,将formatting_info参数设置为True,默认是False,否则可能调用merged_cells方法获取到的是空值。

>>> workbook = xlrd.open_workbook(r'E:\Py-Test-Script\py-test\user.xls', formatting_info=True)
>>> sheet2 = workbook.sheet_by_name('Sheet1')
>>> print sheet2.merged_cells
[(1, 3, 3, 5), (4, 7, 3, 4)]
>>> merg = []
>>> for lrow, lrow_range, rcol, rcol_range in sheet2.merged_cells:
        merg.append([lrow, rcol])
        print sheet2.cell_value(lrow, rcol)

        
合并D2-E3
合并D5-D7
>>> 

合并行单元格读取行的第一个索引,合并列单元格读取列的第一个索引

>>> sheet1.cell(1, 3).value
u'\u5408\u5e76D2-E3'
;