"""环境:python 3.7
pip install xlrd==1.2.0
ps:xlrd 新版本不支持读取xlsx文件
"""
import xlrd
#打开excel,注意文件路径
# excel=xlrd.open_workbook('test.xlsx')
# print(excel) #尝试打打印,不报错,就说明成功了
# #选择具体excel里面的sheet页
# sheet_name = excel.sheet_by_name('sheet页名称')#通过sheet页名称
# sheet_index = excel.sheet_by_index() #通过索引值来选择 索引值从0开始
# print(sheet_index,sheet_name) #尝试打印
# #读取表中的数据 ps:以下 sheet_name与sheet_index 只是以不同的方式打开文件,可都看错sheet
# #读取行 索引从0开始row_values(行数)
# row = sheet_name.row_values(0)
# rows =sheet_name.nrows #获取总共有多少行
# #读取列 col_values(列数)
# col = sheet_index.col_values()
# #读取单元格 cell_value(行数,列数)
# cell = sheet_name.cell_value(0,1)
# print(row,col,cell)
"""封装读取excel,使用xlrd"""
class exceloperation():
def __init__(self,filename):
"""初始化类,每次传入文件名
:param filename: excel的路径
"""
self.excel=xlrd.open_workbook(filename)
def get_data_by_index(self,index):
"""
通过index获取数据
:param index:
:return:
"""
sheet =self.excel.sheet_by_index(index) #打开哪一个sheet页
return self.get_info_data(sheet)
def get_data_by_name(self,name):
sheet=self.excel.sheet_by_name(name)
return self.get_info_data(sheet)
def get_info_data(self,sheet):
"""
获取所有数据
:param sheet:
:return:
"""
keys = sheet.row_values(0) #以第一行的数据作为key
rows = sheet.nrows #获取所有行
cols = sheet.ncols #获取所有列
data_list=[] #定义一个空列表来接收数据
for row in range(1,rows): #从第一行遍历行
value_list=[] #定义空列表用来接收列值
for col in range(cols):
value=self.read_cell(sheet,row,col)
value_list.append(value) #循环遍历列值并追加到value_list中
tmp = zip(keys,value_list) #zip 函数,将获取的key,value重新生成一个元组
data_list.append(dict(tmp)) #将元组转换成字典添加到列表中
return data_list
def read_cell(self,sheet,row,col):
"""
处理单元格数据类型 excel数据类型 Python数据类型
:param sheet: sheet页 1 str
:param row: 行 2 整数
:param col: 列 3 时间
:return: 4 布尔值
ps:excel中数据类型与Python读取后的数据类型有一定的差异
"""
sheet=self.excel.sheet_by_name('T')
# sheet=self.excel.sheet_by_index(0)
cell = sheet.cell_value(row,col) #获取单元格值
cell_type = sheet.cell_type(row,col) #获取单元格值类型
if cell_type==1:
cell=cell #数据类型为1不做处理
elif cell_type ==2 and cell % 1==0:
cell =int(cell) #数据类型为2 python读取后为数字.0,所以强转为整数
elif cell_type ==4:
cell =True if cell==1 else False #三目运算符 excel中的True在python读取后展示为1,False为0。
return cell
if __name__ == '__main__':
oper = exceloperation(test.xlsx')
data = oper.get_data_by_name('T') #调用函数 打开索引为0的sheet页,想打开哪一个就填对应的index
print(data)
注意文件路径:这里我将excel与py文件放在一个目录里面 也可r'绝对路径'
这里T 是sheet页名称
时间类型的还没get到。。。。。