oledb excel一些日期列返回null

时间:2019-04-26 12:13:32

标签: c# excel oledb

我正在通过oledb读取xlsx文件。在某些行中,列(包含日期字符串)返回null,在某些行中,列(还包含日期字符串)返回日期字符串。在excel中,列类型设置为“日期”。

这是我的连接字符串:

  

$“ Provider = Microsoft.ACE.OLEDB.12.0; Data   源= {PATH_TO_FILE};扩展属性= \“ Excel 12.0   Xml; HDR = NO \“”

以下是查询数据的命令文本:

  

$“ SELECT * FROM [SHEET_NAME $ A4:BC]在哪里   F1不为空”

这是我从数据记录中读取数据的方式:

var test = dataRecord.GetValue(dataRecord.GetOrdinal("F39"));

以下是一些示例,当测试包含日期字符串时,检查员会向我显示:

{07.01.1975 00:00:00}
{03.08.1987 00:00:00}
{03.10.1988 00:00:00}
{01.05.1969 00:00:00}
{20.12.2016 00:00:00}
{18.07.2011 00:00:00}

在其他情况下,检查员仅显示:

{}

这是xlsx文档的屏幕截图,其中我用红色标记了一行,其中返回值为空,绿色标记了一行,其中返回了实际的日期字符串:

enter image description here

日期字符串的格式类似于dd.mm.yyyy

为什么这些行返回一个空值而不是日期字符串?


如AndyG所建议,我已经检查了日期字符串值是否可能因格式(“ dd.mm.yyyy”与“ mm.dd.yyyy”)的相关性而失败。但是有些情况对于“ mm.dd.yyyy”无效,不会失败。

1 个答案:

答案 0 :(得分:0)

我无法解决问题,但可以通过将exel的列类型更改为text来绕过它。

我必须复制整个xls文件,删除副本的内容,将列类型设置为text,从第一个文件复制内容并将其粘贴到第二个文件中。否则,excel会将日期字符串更改为用于存储日期的数字。

现在我可以正确读取这些单元格了。