首页 > 解决方案 > oledb excel 一些日期列返回 null

问题描述

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

这是我的连接字符串:

$"Provider=Microsoft.ACE.OLEDB.12.0;数据源={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 文档的屏幕截图,我在其中标记了一条红色的行,其中返回值为空,而绿色则返回实际的日期字符串:

在此处输入图像描述

日期字符串的格式如下dd.mm.yyyy

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


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

标签: c#exceloledb

解决方案


我无法解决问题,但能够通过将 Excel 中的列类型更改为文本来绕过它。

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

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


推荐阅读