昨天在处理python读取excel的时候遇到了点小问题。分享一下~
起初想法是把excel里面的数据读取并存在二维数组返回,供后面处理使用
def readexcel(exceldir):
os.chdir(exceldir)
try:
f1 = xlrd.open_workbook('sggwhu_stationinfo.xlsx')
except:
print('There is no excel named sggwhu_stationinfo.xlsx\n Please cheek ! \n')
sheet = f1.sheet_by_index(0) # 读sheet,这里取第一个sheet
rows = sheet.nrows # 获得行数
infor = [[] for i in range(rows)] # 定义了一个二维列表,行数等于sheet的行数。
for i in range(1, rows): # 去掉表头,从第二行开始读
for j in range(1, 5): # 因为第一列是序号,数据从第二列开始读
infor[i-1][j-1]=sheet.cell(i,j).value# 给二维列表赋值
print(infor)
return infor
但是有报错:
开始以为是超界了反复试都没用,后来把infor输出来才意识到cell返回的是一个数组,而每次赋值给一个数组当然会超界
每次返回元素才行,但没找到相关的excel函数,于是将代码修改了一下,每次就接收数组。
sheet.cell(i, j) 是读取 i 行 j 列的表格元素,为了得到一行的值,改用sheet.row_values(i) 得到 i 行的元素。
注意返回的也是数组形式,因此循环读取一定要定义二维列表。
def readexcel(exceldir):
os.chdir(exceldir)
try:
f1 = xlrd.open_workbook('sggwhu_stationinfo.xlsx')
except:
print('There is no excel name sggwhu_stationinfo.xlsx\n Please cheek ! \n')
sheet = f1.sheet_by_index(0) # 读sheet,这里取第一个
rows = sheet.nrows # 获得行数
data = [[] for i in range(rows)] # 去掉表头,从第二行读数据
for i in range(1, rows):
data[i-1] = sheet.row_values(i)[1:5] # 去掉序号,取四个数据
#for var in data:
#print(var)
return data
记得要import xlrd
这样的话就OK了