c# OleDbDataReader 获取单元格值而不是文本

c# OleDbDataReader get cell value not text

我有一个由第三方生成的 excelsheet,我需要从中读取数据。一列在 excelsheet 中被格式化为百分比,当我从 sheet 中读取数据时,我得到例如。 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)

您可以通过代码更改列类型,不需要打开 sheet。

 xlYourRange.NumberFormat = "@";  //for text
 xlYourRange.Value = "'0123456";   // for number

有关更改 format/Type 的更多详细信息,请参阅此处:Set data type like number, text and date in excel column using Microsoft.Office.Interop.Excel in c#

嗯,你会知道的。 运行 又变成了 excel/Oledb 问题,以为我 google 呢。显然我已经在这里发布了一个问题。

虽然这次我找到了某种解决方案。

因为我只有 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 引擎根据第一行做出列类型假设。我在第一行中有文本,因此在提取时忽略了所有日期。 我通过首先将没有日期值的单元格更新为 null 来解决问题。然后我用 IMEX=0

获取了所有值