Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用xlrd从Excel读取日期时,datetime随机变为浮点_Python_Excel_Datetime_Xlrd - Fatal编程技术网

在Python中使用xlrd从Excel读取日期时,datetime随机变为浮点

在Python中使用xlrd从Excel读取日期时,datetime随机变为浮点,python,excel,datetime,xlrd,Python,Excel,Datetime,Xlrd,我正在使用带有xlrd模块的Python脚本从保存在计算机上的Excel文件中读取日期。现在,我已经知道Excel将日期保存为序列日期,它计算自1900年1月0日以来的天数。我一直在使用datetime函数将此数字转换为格式为YYYY-MM-DD的日期对象。例如: v_created = sh.cell(r,created_col).value if not v_created: v_created = 0 elif not isinstance(

我正在使用带有
xlrd
模块的Python脚本从保存在计算机上的Excel文件中读取日期。现在,我已经知道Excel将日期保存为序列日期,它计算自1900年1月0日以来的天数。我一直在使用
datetime
函数将此数字转换为格式为YYYY-MM-DD的日期对象。例如:

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 
Updated 
41543.5895833
另一方面,下一个代码块应该做完全相同的事情,但在变量中放入浮点,而不是日期:

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  
据我所知,这段代码与第一段代码相同,但输出如下:

Create 
2013-09-26 
Updated 
41543.5895833
我正在将这些值发送到Oracle数据库。运行查询时,出现以下错误:

Traceback (most recent call last):
    cursor.execute(query, values)
cx_Oracle.DatabaseError: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
为什么一段代码输出一个日期对象,而下一段代码输出一个浮点值?据我所知,Excel使用相同的格式选项以完全相同的方式存储日期

你有一个打字错误

你写道:

v_-upated=datetime.date(1900,1,1)+datetime.timedelta(int(v_-updated)-2)

然后打印
v_updated


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

哦,我的上帝。。。我真蠢!当然,在Python中,它只会当场声明新变量,因此它从未抛出异常。我总是认为我犯了最严重的错误,而通常只是像这样的简单错误。