使用xlrd和pandas读取数据时最好不要交叉使用,容易出现问题
使用xlrd读取,使用pandas的read可以交叉,但是使用pandas读取表格中具体的date日期,和xlrd的编码格式或者什么规则不同,导致使用pandas读取到了日期,但是使用xlrd的xldate_as_tuple方法会报’_XLDAYS_TOO_LARGE’错误,最终决定完全使用xlrd读取excel
# 以下是使用pandas和xlrd交叉使用的example,使用xlrd循环多个sheet表,在sheet表中使用pandas读取
studentexcel = request.POST.get('studentroot')
studentsheets = xlrd.open_workbook(studentexcel)
for sheet in studentsheets.sheets():
df = pd.read_excel(studentexcel, sheet.name)
date= df['日期'].values.tolist()
# 使用以下方法转换pandas读取到的日期类型会报错
for i in date:
date1 = xldate_as_tuple(i,1)
使用如下方法,可以直接将读取到的日期转化为datetime.datetime格式,再直接转化为字符串即可。具体第二个参数是什么,没有查看文档,但是该值为1的时候日期是不正确的,明明是2021年,但是输出是2025年,不知何故。
转化为datetime对象格式后,直接使用字符串转化,如果只需要日期直接使用字符串分割获取需要的格式即可
xlrd.xldate.xldate_as_datetime(table.cell(1, 3).value, 0)
str(date2).split(' ')[0]
还有一种方法是转化为元组形式,没有尝试。
xlrd.xldate_as_tuple(table.cell(2,2).value, 0) #转化为元组形
over