从Excel文件中读取日期会将其转换为32509.0之类的数字

时间:2019-07-19 04:36:15

标签: excel python-3.x xlrd

当我使用xlrd包从Excel文件中读取日期时,导入的数据不是日期,而是像32509.0这样的数字。

Excel输入数据为1989-01-01之类的日期。

代码:

import xlrd
import mysql.connector
import datetime

name= "Anand1989.xls"
book=xlrd.open_workbook(name)
worksheet = book.sheet_by_index(0)
database = mysql.connector.connect (host="localhost", user = "root", passwd = "", db = "rainfall")
cursor = database.cursor()
query = """INSERT INTO  Anand1989(DATE) VALUES (%s)"""
for r in range(1, worksheet.nrows):
    DATE = worksheet.cell(r,0).value
    date_time_obj = datetime.datetime.strptime(str(DATE), '%Y-%m-%d').date
    values = (date_time_obj)
cursor.execute(query, values)
cursor.close()
database.commit()
database.close() 
print ("All Done! Bye, for now.")
Traceback (most recent call last):
File "newins.py", line 46, in <module> date_time_obj = datetime.datetime.strptime(str(DATE), '%Y-%m-%d').date
File "C:\Users\student\AppData\Local\Programs\Python\Python37-32\lib\_strptime.py", line 577, in _strptime_datetimet tt, fraction,gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\student\AppData\Local\Programs\Python\Python37-32\lib\_strptime.py", line 359, in _strptime (data_string, format)) ValueError: time data '32509.0' does not match format '%Y-%m-%d'

1 个答案:

答案 0 :(得分:0)

在Excel中,日期是数字,等于1/1/1900,等于1。因此,数字32509表示对应于1/1/1900或1/1/1989之后的32508天的日期(小数部分对应于时间)。

您可以使用xlrd.xldate.xldate_as_tuple(ExcelDate,datemode)

其中:

ExcelDate:代表日期时间的十进制数字。

datemode为0:基于1900或1:基于1904(在这种情况下应为0)

并返回格式(年,月,日,小时,分钟,最近的秒)的元组