繁体   English   中英

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

[英]Read Excel using OLEDB with Cell Format

我正在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();

请确实提供一些解决方案。

注意:在最坏的情况下,如果我的性能没有受到影响,我可以选择其他选项来读取Excel。

这可能是问题所在:通过ConnectionStrings :找出位于注册表REG_DWORD“ TypeGuessRows”的[HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Jet \\ 4.0 \\ Engines \\ Excel]。 这是不让Excel仅使用前8行猜测列数据类型的关键。 将此值设置为0以扫描所有行。 这可能会损害性能。 另请注意,添加IMEX = 1选项可能会使IMEX功能仅在8行之后设置。 而是使用IMEX = 0来确保强制注册表TypeGuessRows = 0(扫描所有行)起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM