c# - Excel OLEDB 将有效值读取为 DBNull
问题描述
我有一个包含一行双精度值的 excel 文件。它正确验证了前 8 行,但如果第 9 行或更高行中有错误数据,则它将数据类型视为 dbnull 而不是 double。
例如,如果我的列看起来像这样(3 行):
1234.22
1234.55
5555.xyz
这会将第 3 行视为双精度,并且第 3 行具有字母数字字符
但是,如果我这样做(超过 9 行):
1234
12345
12346
4357676
3456787
3456567
234234
978978
76867.ddd
123942
然后它会将倒数第二行视为 dbNull,其单元格值为“”。但它会再次看到最后一行以其正确的单元格值再次翻倍。
这是我的连接字符串,所以我使用 Imex = 1
string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";Extended Properties='Excel 12.0;IMEX=1;'";
经过进一步调查,这是导致问题 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] 位于注册表 REG_DWORD "TypeGuessRows" 我发现。在注册表中默认为 8。
显然这仅读取前 8 行。我需要能够扫描所有行。
我没有办法在代码中设置它吗?我无法在工作中修改注册表
解决方案
推荐阅读
- angular - Angular 6 HTTP 处理成功的响应(成功代码:200)作为错误响应
- excel - 在列中查找值并获取其下方的值
- javascript - Babel 在尝试构建 React 应用程序时抛出错误
- scala - Scala Cake Pattern 的缺点是依赖注入
- javascript - 如何编写正确的 XPath 或 CSS?
- javascript - JavaScript 返回字符串,限制为 2 个字符
- r - 组合成一个数据帧时尝试保留矩阵和行的名称
- html - 在图像上移动元素?
- arrays - 具有 n 个数字的数组的冒泡排序与 Theta(n*sqrt(n)) 交换
- android - 加载 Firebase 数据之前的布局