我有一个由第三方生成的Excel工作表,我需要从中读取数据。一列在 excelsheet 中格式化为百分比,当我从工作表中读取数据时,我得到例如。27%.但是如果我打开 excel 并单击单元格,我可以看到单元格的实际值为 0,27673528。如何在不打开 excel 文件并修改列类型的情况下获取该值?
我正在使用连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Chr(34) & uploadFileName & Chr(34) & ";Extended Properties=" & Chr(34) & "Excel 8.0;HDR=NO;IMEX=1;" & Chr(34)
代码更改列类型,这不需要打开工作表。
xlYourRange.NumberFormat = "@"; //for text
xlYourRange.Value = "'0123456"; // for number
有关更改格式/类型的更多详细信息,请参阅此处:在 c# 中使用 Microsoft.Office.Interop.Excel 在 excel 列中设置数据类型,如数字、文本和日期
你知道吗?再次遇到excel/Oledb问题,并认为我用谷歌搜索它。显然我已经在这里发布了一个问题。
虽然这次我找到了某种解决方案。
由于我只有 JET 发动机可以使用这个答案,所以我想只对此有效。
问题:假设我在 excel 中有一个基础值为 2017-09-01 14:40:37 的单元格。虽然单元格仅显示 2017-09-01 14:40。当我使用 OleDbConnection 和 JET 和 IMEX=1 检索值时,我只收到 2017-09-01 14:40。
解决方案:要获得整个值,我必须设置 IMEX=0。
警告:JET 引擎根据第一行做出列类型假设。我在 forst 行中有文本,因此在获取时忽略了所有日期。我通过首先将没有日期值的单元格更新为 null 来解决此问题。然后我用 IMEX=0 获取所有值