c# - 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”无效,但不会失败。
解决方案
我无法解决问题,但能够通过将 Excel 中的列类型更改为文本来绕过它。
我必须复制整个 xls 文件,删除副本的内容,将列类型设置为文本,从第一个文件复制内容并将其粘贴到第二个文件中。否则 Excel 会将日期字符串更改为用于存储日期的数字。
现在我可以正确读取单元格了。
推荐阅读
- c++ - 阻塞管道 ConnectNamedPipe 不会触发
- python - 在 Python 中命名新的数据类型
- firebase - Firestore 规则:当文档不存在时,get() 抛出错误而不是返回 null(仅在 Prod 和 Emulator 中;适用于规则测试器)
- r - 重新排列绘图中的重叠条,以便更长的条在后面 -R
- javascript - 根据 AJAX 成功更改 img 属性(src、alt...)(并修复我的 ajax;))
- sql - 违反 Oracle 生日列正则表达式约束
- html - 背景剪辑在谷歌网站中不起作用
- reactjs - 我们可以得到所有
- 在其上使用 React ref 的值
- 父母?
- 在其上使用 React ref 的值
- python - 如何使用 python-pptx 添加 xaxis 和 yaxis 标签
- lotus-notes - NotesDocument 打开两次