xlrd模块实现对excel文件内容读取 支持xls和xlsx格式 (最新版好像不支持xlsx)
1、以下表来举例说明 [0,0]
2、安装并导入xlrd模块
在PyCharm终端输入: pip install xlrd
导入:import xlrd
3、打开Excel文件返回数据
wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\测试一下.xlsx')
4、通过以下3种方法获取工作表
table = wb.sheets()[0] # 通过索引顺序获取
table = wb.sheet_by_index(0) # 通过索引顺序获取
table = wb.sheet_by_name(u'表1') # 通过名称获取
tables = wb.sheet_names() # 以列表形式返回wb所有的表 ['表1', '表2', '表3']
5、获取table中的有效行数
row = table.nrows
print(row) # 6
6、获取table中的有效列数
col = table.ncols
print(col) # 5
7、获取一行中有多少列数据
num = table.row_len(0)
print(num) # 5
8、获取整行的值(数组)
v = table.row_values(0) # ['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']
v = table.row_values(1) # ['Lilei', 20.0, 'A00001', 13800138001.0, 'China']
9、获取整列的值(数组)
v = table.col_values(0) # ['学号', 'B00001', 'B00002', 'B00003', 'B00004', 'B00005', 'B00006', 'B00007']
v = table.col_values(1) # ['姓名', '张1', '张2', '张3', '张4', '张5', '张6', '张7']
10、循环行列表数据
for i in range(row):
print(table.row_values(i))
['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']
['Lilei', 20.0, 'A00001', 13800138001.0, 'China']
['Hanmeimei', 18.0, 'A00002', 13800138002.0, 'Americe']
['Jony', 21.0, 'A00003', 13800138003.0, 'Japan']
['Herry', 25.0, 'A00004', 13800138004.0, 'Aussie']
['NoNy', 27.0, 'A00005', 13800138005.0, 'Italy']
11、读取指定单元格的值
cell = table.cell(0,4).value # COUNTRY
cell = table.cell(3,2).value # A00003
cell = table.cell_value(rowx=3,colx=4) # Japan
12、使用行列索引读取具体单元格的值
cell = table.row(0)[0].value # NAME
cell = table.row(1)[2].value # A00001
13、获取单元格的数据类型
python读取excel中单元格的内容返回的有5种类型。ctype: 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error
value = table.cell_type(rowx=0, colx=1) # 1
14、以键值对形势读取表单信息
import xlrd
from xlrd import xldate_as_tuple
import datetime
'''
xlrd中单元格的数据类型
数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以我们必须在程序中做判断处理转换
成我们想要的数据类型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
'''
class ExcelData():
def __init__(self):
self.wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\测试一下.xlsx')
self.table2 = self.wb.sheet_by_name('表2')
self.keys = self.table2.row_values(0)
self.rowNum = self.table2.nrows
self.colNum = self.table2.ncols
def readExcel(self):
datas = []
for i in range(1, self.rowNum):
sheet_data = {}
for j in range(self.colNum):
# 获取单元格数据类型
c_type = self.table2.cell(i,j).ctype
# 获取单元格数据
c_cell = self.table2.cell_value(i, j)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
c_cell = int(c_cell)
elif c_type == 3:
# 转成datetime对象
date = datetime.datetime(*xldate_as_tuple(c_cell,0))
c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
elif c_type == 4:
c_cell = True if c_cell == 1 else False
sheet_data[self.keys[j]] = c_cell
datas.append(sheet_data)
return datas
if __name__ == "__main__":
get_data = ExcelData()
datas = get_data.readExcel()
print(datas)
执行结果:
[
{'学号': 'B00001', '姓名': '张1', '年龄': 18, '专业': '语文', '考试时间': '2019/18/06 00:00:00'},
{'学号': 'B00002', '姓名': '张2', '年龄': 19, '专业': '数学', '考试时间': '2019/19/06 00:00:00'},
{'学号': 'B00003', '姓名': '张3', '年龄': 20, '专业': '英语', '考试时间': '2019/20/06 00:00:00'},
{'学号': 'B00004', '姓名': '张4', '年龄': 21, '专业': '物理', '考试时间': '2019/21/06 00:00:00'},
{'学号': 'B00005', '姓名': '张5', '年龄': 22, '专业': '化学', '考试时间': '2019/22/06 00:00:00'},
{'学号': 'B00006', '姓名': '张6', '年龄': 23, '专业': '生物', '考试时间': '2019/23/06 00:00:00'},
{'学号': 'B00007', '姓名': '张7', '年龄': 24, '专业': '历史', '考试时间': '2019/24/06 00:00:00'}
]
总结:
在执行时如果提示 xlrd.biffh.XLRDError: Excel xlsx file; not supported
说明 xlrd更新到了2.0.1版本,只支持.xls文件
可以安装旧版xlrd
pip uninstall xlrd
pip install xlrd==1.2.0