混合类型Null值与c#中的连接字符串

时间:2016-02-19 10:53:32

标签: c# excel

我正在尝试用C#读取以下excel文件。

Excelsheet

我已尝试过这两种连接字符串:

第一个连接字符串:我得到了标题的正确值,所有其他单元格都为null。

sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
              strExtendedProperties = "Excel 12.0;HDR=Yes;";

第二个连接字符串:我得到的标题值不正确,所有其他单元格的值都是正确的。

sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
              strExtendedProperties = "Excel 12.0;HDR=Yes;IMEX=1";

使用扩展属性解决了我在读取混合类型数据(标题)时遇到的问题。但是,现在,它不是在读取数据中的小数,日期和百分比值。

对于两个连接字符串,我得到一些单元格null,尽管我有值。如何修改连接字符串以正确读取Excel文件?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

请查看以下内容,以便回答您的​​问题。 我从以下来源http://www.codeproject.com/Questions/385351/decimal-data-in-xls-file-not-being-read-and-or-con

中找到了这个

" HDR =是;"表示第一行包含列名,而不是数据。 " HDR =无;"表明相反。

" IMEX = 1;"告诉司机总是读"混合" (数字,日期,字符串等)数据列为文本。请注意,此选项可能会影响Excel工作表写入访问权限。

SQL语法" SELECT [列名一],[列名二] FROM [Sheet One $]"。即excel工作表名称后跟" $"包裹在" [" "]"括号中。

查看[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel]所在的注册表REG_DWORD" TypeGuessRows"。这是不让Excel仅使用前8行来猜测列数据类型的关键。将此值设置为0可扫描所有行。这可能会影响性能。另请注意,添加IMEX = 1选项可能会导致IMEX功能仅在8行后设置。使用IMEX = 0来确保强制注册表TypeGuessRows = 0(扫描所有行)。

如果Excel工作簿受密码保护,即使通过连接字符串提供正确的密码,也无法打开它进行数据访问。如果您尝试,则会收到以下错误消息:"无法解密文件。"