1.读取数据整理成列表,可以兼容表格里日期,字符串等字符,详细请看代码:
def get(self, sheetname,data_count): #接收两个值,第一个是表单名称,第二个是从第几行还是读
workbook = xlrd.open_workbook(self.file) #文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。
sheet = workbook.sheet_by_name(sheetname) # 通过名称获取,读取第一个接收的表格
nrows = sheet.nrows # 获取该sheet中的有效行数
first_row_values = sheet.row_values(1) # 去读表格第一行数据,如果是字典模式可以当做key使用,列表可用户那单元格数据判断使用
list_all = []
num = data_count #从表格第几行开始读取
for row_num in range(1, nrows): # 循环根据拿到的行数循环多少次,拿完为止
if row_num ==2:
continue
row_values = sheet.row_values(row_num) #返回由该行中所有单元格的数据组成的列表
if row_values:
str_obj = []
for i in range(len(first_row_values)): #循环取单元格里的值
ctype = sheet.cell(num, i).ctype #返回单元格对象
cell = sheet.cell_value(num, i) #返回单元格中的数据
if ctype == 2 and cell % 1 == 0.0: # ctype为2且为浮点
cell = int(cell) # 浮点转成整型
cell = str(cell) # 转成整型后再转成字符串,如果想要整型就去掉该行
elif ctype == 3:
date = datetime(*xldate_as_tuple(cell, 0))
cell = date.strftime('%Y/%m/%d %H:%M:%S')
elif ctype == 4:
cell = True if cell == 1 else False
str_obj.append(cell)
list_all.append(str_obj)
num = num + 1
return list_all
2.读取数据整理成字典,(num=1,读取第一行作为字典key使用,索引从0开始计算)可以兼容表格里日期,字符串等字符,详细请看代码:
def get(self, sheetname): #接收两个值,第一个是表单名称,第二个是从第几行还是读
workbook = xlrd.open_workbook(self.file) #文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。
sheet = workbook.sheet_by_name(sheetname) # 通过名称获取,读取第一个接收的表格
nrows = sheet.nrows # 获取该sheet中的有效行数
first_row_values = sheet.row_values(1) # 去读表格第一行数据,如果是字典模式可以当做key使用,列表可用户那单元格数据判断使用
list_all = []
num = 1 #读取的第一行用作字典的key使用
for row_num in range(1, nrows): # 循环根据拿到的行数循环多少次,拿完为止
if row_num ==2:
continue
row_values = sheet.row_values(row_num) #返回由该行中所有单元格的数据组成的列表
if row_values:
str_obj = {}
for i in range(len(first_row_values)): #循环取单元格里的值
ctype = sheet.cell(num, i).ctype #返回单元格对象
cell = sheet.cell_value(num, i) #返回单元格中的数据
if ctype == 2 and cell % 1 == 0.0: # ctype为2且为浮点
cell = int(cell) # 浮点转成整型
cell = str(cell) # 转成整型后再转成字符串,如果想要整型就去掉该行
elif ctype == 3:
date = datetime(*xldate_as_tuple(cell, 0))
cell = date.strftime('%Y/%m/%d %H:%M:%S')
elif ctype == 4:
cell = True if cell == 1 else False
str_obj[first_row_values[i]] = cell
list_all.append(str_obj)
num = num + 1
return list_all
3.读取给定列数,如读取该表中第3列~5列
def read_ncols(self, sheetname, ncols, n=1, num=1000): # i,sheet索引
ExcelFile = xlrd.open_workbook(self.file)
table = ExcelFile.sheet_by_name(sheetname)
nrows = table.nrows # 行数
ncols = table.ncols # 列数
j = 0 # 循环次数
for row in range(1, nrows):
j += 1
line = []
if self.tag == 'True':
for col in range(0, ncols):
line.append(table.cell(row, col).value)
yield line
elif self.tag == 'False':
if j >= n and j < n + num:
for col in range(0, ncols):
line.append(table.cell(row, col).value)
yield line