可以下载xlrd库包到本地安装,也可以通过pip命令安装,这里偶选择pip命令:
pipinstallxlrd
二、使用xlrd读取excel数据
具体详细的操作可以参考xlrd库操作说明文档,以下是两种读取excel数据的方法:
1、根据Excel中sheet名称读取数据:
defreadExcelDataByName(fileName,sheetName):
table=None
errorMsg=None
try:
data=xlrd.open_workbook(fileName)
table=data.sheet_by_name(sheetName)
exceptException,msg:
errorMsg=msg9returntable,errorMsg
2、根据Excel中sheet的序号获取:
defreadExcelDataByIndex(fileName,sheetIndex):
table=None
errorMsg=""
try:
data=xlrd.open_workbook(fileName)
table=data.sheet_by_index(sheetIndex)
exceptException,msg:
errorMsg=msg
returntable,errorMsg
3、根据列名获取相应序号,由于有时读取excel中列数据时,需要通过列头名称获取相应的列中的值,所以写了下面这个返回列名所在表格中的index。然后就可以直接通过table.cell_value(i,getColumnIndex(table,'列名'))获取列的值。
defgetColumnIndex(table,columnName):
columnIndex=None3
foriinrange(table.ncols):5
if(table.cell_value(0,i)==columnName):
columnIndex=i
break
returncolumnIndex
下面加入需要读取如下excel表格中的数据,在读取数据时直接根据列名去获取相应的值。
根据列名读取相应的值,代码如下:
#!/usr/bin/python
#coding=utf-8
__author__='Paul'
importxlrd
importchardet
importtraceback
defgetColumnIndex(table,columnName):
columnIndex=None
#printtable
foriinrange(table.ncols):
#printcolumnName
#printtable.cell_value(0,i)
if(table.cell_value(0,i)==columnName):
columnIndex=i
break
returncolumnIndex
defreadExcelDataByName(fileName,sheetName):
#printfileName
table=None
errorMsg=""
try:
data=xlrd.open_workbook(fileName)
table=data.sheet_by_name(sheetName)
exceptException,msg:
errorMsg=msg
returntable,errorMsg
defreadExcelDataByIndex(fileName,sheetIndex):
table=None
errorMsg=""
try:
data=xlrd.open_workbook(fileName)
table=data.sheet_by_index(sheetIndex)
exceptException,msg:
errorMsg=msg
returntable,errorMsg
if__name__=='__main__':
#example
xlsfile='F:/test_AutoTesting/TestCase/RunList.xlsx'
table=readExcelDataByName(xlsfile,'Sheet1')[0]
#获取第一行的值
testcase_id=table.cell_value(1,getColumnIndex(table,'TestCaseID'))
app_config=table.cell_value(1,getColumnIndex(table,'APPConfig'))
printu'测试用例ID为:%s'%(testcase_id)
printu'配置信息为:%s'%(app_config)
得出结果如下:
4、读取excel中的文本或数值转换成了float的问题
有时Excel中的值为20,但读取出来的值却变成了20.0,这与大家想要的不大一致,特别是做UI自动化测试过程中需要下拉选择值时就完全选不出想要的选项了。目前偶想到的是通过下面的语句来处理:
ifisinstance(inputValue,float):#判断读取到的值是否为float
ifinputValue==int(inputValue):#判断读取到的值与转成int后的值是否相等,如果相等则转成int
inputValue=int(inputValue)
inputValue=str(inputValue)#转成s