Excel 时间读取
当本地Excel存有一个时间列时,使用下面代码读取Excel
import xlrd
book = xlrd.open_workbook('demo.xls')
sheet = book.sheet_by_name('Sheet1')
for row in range(sheet.nrows):
print(sheet.row_values(row))
# 输出:
# ['时间']
# [43025.0]
通过输出,可以看到 Excel 中的时间 ‘2017/10/17’,输出为一个数字,很明显这和我们需要的时间类型有出入。
那我们需要如何处理呢?
1.首先我们需要判断Excel单元格中的数据类型
for row in range(sheet.nrows):
for col in range(sheet.ncols):
print(sheet.cell(row,col))
print('type',sheet.cell(row,col).ctype)
# 输出:
# text:'时间'
# type 1
# xldate:43025.0
# type 3
通过上面的代码可以知道时间类型的ctype值为3
2.通过 xldate_as_tuple 方法,将读取的Excel值转换为 tuple,再通过datetime转换为转为时间类型
import datetime
for row in range(sheet.nrows):
for col in range(sheet.ncols):
if sheet.cell(row,col).ctype == 3:
date = xldate_as_tuple(sheet.cell(row,col).value,0)
print(date)
print(datetime.datetime(*date))
#输出:
# (2017, 10, 17, 0, 0, 0)
# 2017-10-17 00:00:00
完整代码:
import xlrd
from xlrd import xldate_as_tuple
import datetime
book = xlrd.open_workbook('demo.xls')
sheet = book.sheet_by_name('Sheet1')
for row in range(sheet.nrows):
for col in range(sheet.ncols):
value = sheet.cell(row,col).value
if sheet.cell(row,col).ctype == 3:
date = xldate_as_tuple(sheet.cell(row,col).value,0)
value = datetime.datetime(*date)
print(value)
# 输出:
# 时间
# 2017-10-17 00:00:00