作者:chasewindboy | 来源:互联网 | 2023-12-11 15:08
在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。
#错误描述:
在开发.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的
Microsoft Access Database Engine 2007 Office system 驱动程序:数据连接组件
https://www.microsoft.com/zh-cn/download/details.aspx?id=23734
2)适用于office2010的
Microsoft Access Database Engine 2010 Redistributable
https://www.microsoft.com/zh-CN/download/details.aspx?id=13255
此下载将安装一组组件,非 Microsoft Office 应用程序可以使用它们从 2007/2010 Office system 文件中读取数据,例如从 Microsoft Office Access 2007/2010(mdb 和 accdb)文件以及 Microsoft Office Excel 2007/2010(xls、xlsx 和 xlsb)文件中读取数据。这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。
此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。
2、在IIS应用程序池中,设置“”启用兼容32位应用程序”,此设置适用于web项目;
如图:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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";
“HDR =Yes;”
表示第一行包含列名,而不是数据。
“HDR =No;”
表明相反;
2)读取xlsx格式的excel
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";
“HDR =Yes;” 表示第一行包含列名,而不是数据。“HDR =No;” 表明相反;
Microsoft.ACE.OLEDB连接字符串参考地址:
https://www.connectionstrings.com/ace-oledb-12-0/