问题与解决
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 错误。
1
|
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 驱动 。
此时连接字符串改为:
1
|
String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFileName + ";Extended Properties=Excel 8.0;" ;
|
需要注意的是,上面的驱动,能够成功的创建 xlsx 文件,但是用 Excel 打开的时候,会提示错误信息。驱动需要修改为:
1
|
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 的