当前位置:  开发笔记 > 编程语言 > 正文

使用C#访问Excel电子表格偶尔会返回某些单元格的空白值

如何解决《使用C#访问Excel电子表格偶尔会返回某些单元格的空白值》经验,为你挑选了1个好方法。

我需要访问Excel电子表格并将电子表格中的数据插入SQL数据库.但是主键是混合的,大多数是数字的,有些是字母数字.

我遇到的问题是,当数字和字母数字键在同一个电子表格中时,字母数字单元格返回空白值,而所有其他单元格返回其数据没有问题.

我正在使用OleDb方法来访问Excel文件.使用Command字符串检索数据后,我将数据放入DataAdapter,然后填充DataSet.我遍历DataSet中第一个DataTable中的所有行(dr).

我使用dr ["..."]引用列.ToString()

如果我在Visual Studio 2008中调试项目并查看"扩展属性",将鼠标悬停在"dr"上我可以查看DataRow的值,但应该是字母数字的主键是{}.其他值用引号括起来,但空白值有大括号.

这是C#问题还是Excel问题?

有没有人曾经遇到过这个问题,或者可能找到了解决方法/修复方法?

提前致谢.



1> 小智..:

解:

连接字符串:

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = FilePath; Extended Properties ="Excel 8.0; HDR = Yes; IMEX = 1";

    HDR=Yes;表示第一行包含列名,而不是数据.HDR=No;表明相反.

    IMEX=1;告诉驱动程序始终将"混合"(数字,日期,字符串等)数据列读作文本.请注意,此选项可能会影响Excel工作表写入访问权限.

SQL语法SELECT * FROM [sheet1$].即excel工作表名称后跟a $并用[ ]括号括起来.

重要:

查看位于注册表REG_DWORD"TypeGuessRows"的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel].这是不让Excel仅使用前8行来猜测列数据类型的关键.将此值设置为0可扫描所有行.这可能会影响性能.

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


完善!帮我解决了同样的问题.转义双引号:扩展属性="Excel 8.0; HDR =是; IMEX = 1"变为扩展属性= \"Excel 8.0; HDR =是; IMEX = 1 \"并且所有问题都没问题!
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有