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

时间:2016-04-21 11:52:35

标签: c# excel oledbdatareader

我有一个由第三方生成的excelsheet,我需要从中读取数据。在excelsheet中将一列格式化为百分比,当我从表格中读取数据时,我得到例如。 27%。但是,如果我打开excel并单击该单元格,我可以看到该单元格的实际值为0,27673528。如何在不打开excelfile和修改列类型的情况下获得该值?

我正在使用connectionstring:

"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)

2 个答案:

答案 0 :(得分:0)

您可以通过代码更改列类型,而不需要打开工作表。

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

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

答案 1 :(得分:0)

你知道吗?再次进入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引擎根据第一行生成Column-Type假设。我在forst行中有文本,因此在fetch中忽略了alla日期。 我做了一个解决方法,首先更新没有日期值的单元格为null。然后我用IMEX = 0

获取所有值