python⾥⾯的xlrd模块详解以及样例什么是xlrd模块?
♦python操作excel主要⽤到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。
♦python读取excel中单元格的内容返回的有5种类型:
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
相关⽅法介绍
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模块
♦或者在cmd窗⼝ pip3 install xlrd
⼆、使⽤介绍
1、常⽤单元格中的数据类型
2、导⼊模块
import xlrd
3、打开Excel⽂件读取数据
data = xlrd.open_workbook(filename)#⽂件名以及路径,如果路径或者⽂件名有中⽂给前⾯加⼀个r拜师原⽣字符。
4、常⽤的函数
♦ excel中最重要的⽅法就是book和sheet的操作
1)获取book中⼀个⼯作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取
table = data.sheet_by_name(sheet_name)#通过名称获取
以上三个函数都会返回⼀个xlrd.sheet.Sheet()对象
names = data.sheet_names() #返回book中所有⼯作表的名字
data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导⼊完毕
如:
2)⾏的操作
nrows = ws #获取该sheet中的有效⾏数
列表w_values(rowx, start_colx=0, end_colx=None) #返回由该⾏中所有单元格的数据组成的列表w_len(rowx) #返回该列的有效单元格长度
3)列(colnum)的操作python怎么读入excel
ncols = ls #获取列表的有效列数
4)单元格的操作
♦单元格:单元格是表格中⾏与列的交叉部分,它是组成表格的最⼩单位,可拆分或者合并。单个数据的输⼊和修改都是在单元格中进⾏的如:
注意:注意作⽤域问题,之前获取的sheet之后,都在获取到这个sheet值后,在进⾏,⾏和列以及单元格的操作。
问题现象:
问题⼀:
♦1、使⽤open()函数、xlrd.open_workbook()函数打开⽂件,⽂件名若包含中⽂,会报错不到这个⽂件或⽬录。
♦2、获取sheet时若包含中⽂,也会报错。
#打开⽂件
file = open(filename,'rb')
#打开excel⽂件
workbook = xlrd.open_workbook(filename)
#获取sheet
sheet = workbook.sheet_by_name(sheetname)
解决⽅案:
♦对参数进⾏转码即可。如:
filename = filename.decode('utf-8')
♦也试过unicode函数,不过,在ride中运⾏时出现了报错,所以不赞成使⽤。
filename = unicode(filename,'utf-8')
问题⼆;
问题描述: python读取excel中单元格内容为⽇期时,字段⾥明明是⽇期,可读取后显⽰的却是浮点数。
♦python读取excel中单元格的内容返回的有5种类型:
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
1.判断类型演⽰:
>>> ll(2,2).ctype #1990/2/22
3
>>> ll(2,1).ctype #18
2
>>> ll(2,0).ctype #测试
1
>>> ll(2,4).ctype #空值(这⾥是合并单元格的原因)
2。解决浮点数问题,正确取值⽅式:
>>> ll(2,2).value #1990/2/22
33656.0
>>> xlrd.xldate_as_ll_value(2,2),workbook.datemode)
(1992, 2, 22, 0, 0, 0)
>>> date_value =xlrd.xldate_as_ll_value(2,2),workbook.datemode)
>>> date_value
(1992, 2, 22, 0, 0, 0)
>>> date(*date_value[:3])
datetime.date(1992, 2, 22)
>>> date(*date_value[:3]).strftime('%Y/%m/%d')
'1992/02/22'
即可以做下简单处理,判断ctype是否等于3,如果等于3,则⽤时间格式处理:
if (ll(row,col).ctype == 3):
date_value = xlrd.xldate_as_ll_value(rows,3),book.datemode)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
问题三:
问题描述:读取合并单元格内容中内容ll(2,4).ctype返回的值是0,说明这个单元格的值是空值,这就是这个包不完善的地⽅,如果是合并单元格那么应该合并的单元格内容⼀样,但是它只是合并的第⼀个单元格有值,其它为空。
解决办法:通过获取merge_cells返回的row和col低位的索引来判断哪些是合并单元格,然后做后续取值操作。
读取⽂件的时候需要将formatting_info参数设置为True,默认是False,所以上⾯获取合并的单元格数组为空,
2.为什么使⽤xlrd模块?
♦在UI⾃动化或者接⼝⾃动化中数据维护是⼀个核⼼,所以此模块⾮常实⽤。
3.怎样使⽤xlrd模块?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论