我正在通过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文档的屏幕截图,其中我用红色标记了一行,其中返回值为空,绿色标记了一行,其中返回了实际的日期字符串:
日期字符串的格式类似于dd.mm.yyyy
为什么这些行返回一个空值而不是日期字符串?
如AndyG所建议,我已经检查了日期字符串值是否可能因格式(“ dd.mm.yyyy”与“ mm.dd.yyyy”)的相关性而失败。但是有些情况对于“ mm.dd.yyyy”无效,不会失败。
答案 0 :(得分:0)
我无法解决问题,但可以通过将exel的列类型更改为text来绕过它。
我必须复制整个xls文件,删除副本的内容,将列类型设置为text,从第一个文件复制内容并将其粘贴到第二个文件中。否则,excel会将日期字符串更改为用于存储日期的数字。
现在我可以正确读取这些单元格了。