使用单元格格式的OLEDB读取Excel

我在C#中使用ADO DB读取Excel表格,但是我面对的问题是无法复制其格式的单元格数据。 例如

我的一个单元格是货币格式($ 2,123.45),所以当我得到结果集时,我得到的单元格值为(2123.45)。

有什么办法可以得到完全相同的单元格数据,因为它显示在Excel表单。 下面是我从Excel中获取结果集的代码

string sQuery = "Select * From [" + sSheet + "$]"; if (dtType == DataLayer.TestData) sWorkbook = Path.GetDirectoryName(ConfigurationManager.AppSettings["resourcesFolder"]) + @"\Data\Test Data\" + sWorkbook; if (dtType == DataLayer.ExpectedData) sWorkbook = Path.GetDirectoryName(ConfigurationManager.AppSettings["resourcesFolder"]) + @"\Data\Expected Data\" + sWorkbook; string cnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sWorkbook + "; Extended Properties= 'Excel 8.0; HDR=Yes; IMEX=1'"; oConn.Open(cnStr, null, null, 0); oRS.Open(sQuery, cnStr, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic, -1); oConn.Close(); 

请提供一些相同的解决scheme。

注:最坏的情况下,如果我的performance没有受到阻碍,我可以select其他选项来阅读Excel。

这可能是问题:Via ConnectionStrings :检查位于registryREG_DWORD“TypeGuessRows”[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel]。 这是不让Excel使用前8行来猜测列数据types的关键。 将此值设置为0以扫描所有行。 这可能会损害性能。 另请注意,添加IMEX = 1选项可能会导致IMEXfunction在8行之后设置。 使用IMEX = 0来确保强制registryTypeGuessRows = 0(扫描所有行)工作。