在Python中使用xlrd从Excel中读取date时,date时间随机成为浮动

我正在使用xlrd模块的Python脚本从我保存在我的电脑上的Excel文件中读取date。 现在,我已经知道Excel将date保存为一个序列date,它计算1900年1月0日以来的天数。我一直使用datetime函数将这个数字转换成一个YYYY-MM-DDforms的date对象。 例如:

 v_created = sh.cell(r,created_col).value if not v_created: v_created = 0 elif not isinstance(v_created, basestring): v_created = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_created)-2) print 'Create ' print v_created 

这将打印下面的输出:

 Create 2013-09-26 

另一方面,下一个代码块应该做同样的事情,但是把一个浮点数放到variables中,而不是一个date:

 v_updated = sh.cell(r,updated_col).value if not v_updated: v_updated = 0 elif not isinstance(v_updated, basestring): v_upated = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_updated)-2) print 'Updated ' print v_updated 

据我所知,这个代码块与第一个相同,但吐出下面的输出:

 Updated 41543.5895833 

我将这些值发送到Oracle数据库。 当我运行查询时,出现以下错误:

 Traceback (most recent call last): cursor.execute(query, values) cx_Oracle.DatabaseError: ORA-00932: inconsistent datatypes: expected DATE got NUMBER 

为什么一个代码块输出一个date对象,而下一个代码块输出一个浮点数? 据我所知,Excel使用相同的格式选项以完全相同的方式存储date。

你有一个错字。

你写:

v_upated = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_updated)-2)

然后打印v_updated

当我运行它,它的工作41543实际上是自1900年以来的天数…就像你计算。