正文
在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错:
“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”
1 static void Main(string[] args) 2 { 3 readexcel("D:\test\xlsxtest.xlsx"); 4 } 5 public static void readexcel(string _path) 6 { 7 DataTable dt = new DataTable(); 8 string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _path + ";" + "Extended Properties="Excel 12.0;HDR=No""; 9 10 using (OleDbConnection connection = new OleDbConnection(connectionString)) 11 { 12 string SQL = "select * from [sheet1$]"; 13 try 14 { 15 OleDbCommand comm = new OleDbCommand(SQL, connection); 16 if (connection.State != ConnectionState.Open) 17 connection.Open(); 18 OleDbDataAdapter Adpter = new OleDbDataAdapter(comm); 19 Adpter.Fill(dt); 20 } 21 catch (Exception ex) 22 { 23 dt = null; 24 } 25 finally 26 { 27 if (connection.State == ConnectionState.Open) 28 connection.Close(); 29 } 30 31 foreach (DataRow item in dt.Rows) 32 { 33 string sds = item[0].ToString(); 34 Console.WriteLine(item[0].ToString() + "//" + item[1].ToString() + "//" + item[2].ToString()); 35 if (item[1].ToString() == string.Empty) 36 { 37 break; 38 } 39 } 40 Console.ReadKey(); 41 } 42 }
#报错原因:
主要有以下几种原因:
1、没有安装数据访问组件,需要安装相应版本的数据访问组件(AccessDatabaseEngine);
2、没有安装相应版本的Office客户端,需要安装相应版本的Office客户端;
3、没有在IIS应用程序池配置默认属性,需要在相应的IIS应用程序池启用32位应用程序;
4、连接字符串的问题。采用Microsoft.Jet.OleDb.4.0,可以读取excel2007以前的版本,在客户机上不需要部署office,采用Microsoft.Ace.OleDb.12.0的时候,需要安装引擎。
5、顺便说一下,在使用“Microsoft.Jet.OLEDB.4.0”,也会报类似错误,原因有可能是,Microsoft.Jet.OLEDB.4.0在64位系统上不支持,需要修改架构,从x64改为x86,无论是WinForm还是ASP.NET;或者修改连接字符串为Microsoft.ACE.OLEDB.12.0并且安装AccessDatabaseEngine x64数据访问组件;
#解决方案:
1、安装数据访问组件:
1)适用于office2007的
2)适用于office2010的
此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用.
2、在IIS应用程序池中,设置“”启用兼容32位应用程序”,此设置适用于web项目;
如图:
如果下载安装的是x64的,那么你的桌面程序就要选择anycpu或x64发布,而web项目是不兼容的,不管你是如何发布的;
如果下载安装的是x86的,那么你的桌面程序就要选择x86发布,而web项目正常发布就好;
*总结:如果你是web项目,你就下载x86的,发布选anycpu就好了,然后设置应用程序池32位兼容就好了;
*最后说一句,用这个,是不需要安装office软件的;
3、连接字符串
主要如下两种情况:
1)使用Office 2007 OLEDB驱动程序(ACE 12.0)连接到较旧的97-2003 Excel工作簿。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls; Extended Properties="Excel 8.0;HDR=YES";
2)读取xlsx格式的excel
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx; Extended Properties="Excel 12.0 Xml;HDR=YES";