连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
问题与解决
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 错误。
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; " + "Data Source =" + excelFileName + ";Extended Properties=Excel 8.0";
解决方案是:
将生成类型改为x86。具体来讲就是在项目的 “属性”那里, 目标平台由原有的“Any CPU” 修改为 “x86” 重新编译。
有关XLS与XLSX版本的连接字符串设置
使用 Microsoft.Jet.OLEDB.4.0; 如果 Excel 文件名 的扩展名为 xlsx,那么代码运行过程中,会报 “不能更新。数据库或对象为只读。” 的错误。
如果使用 Microsoft.ACE.OLEDB.12.0,扩展名为 xlsx 的时候则不产生错误。因此,C#产生报表的时候,优先使用 Microsoft.ACE.OLEDB.12.0 驱动, 当目标机器无法启用 Microsoft.ACE.OLEDB.12.0 的时候,才使用 Microsoft.Jet.OLEDB.4.0 驱动 。
此时连接字符串改为:
String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFileName + ";Extended Properties=Excel 8.0;";
需要注意的是,上面的驱动,能够成功的创建 xlsx 文件,但是用 Excel 打开的时候,会提示错误信息。驱动需要修改为:
sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
即:
修改的地方 Extended Properties=\"Excel 12.0 Xml;HDR=YES\"。 与以前的 Extended Properties=Excel 8.0, 仅仅当扩展名为 xlsx 的时候, 才使用上面那个驱动的写法。如果扩展名还是 xls 那么还是继续使用 原有的写法,也就是那个 Extended Properties=Excel 8.0 的
你们的评论、反馈,及对你们有所用,是我整理材料和博文写作的最大的鼓励和唯一动力。欢迎讨论和关注!
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。