使用Microsoft.ACE.OLEDB.12.0读取Excel提示提供程序未注册如何解决
问题说明
读取.xlsx格式Excel文件并将数据加载到DataGridView控件时,代码运行抛出如下异常:
System.InvalidOperationException: 'The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.'
已知本机安装的是Office 2019 Pro,尝试修改连接字符串中Microsoft.ACE.OLEDB.12.0的版本号后问题仍未解决,核心疑问为:该问题是本机Excel版本导致,还是需要在Visual Studio中引入额外依赖库?
复现代码如下:
DataTable rs = new DataTable(); using (var odConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=c:\myfile.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';")) { odConnection.Open(); using (OleDbCommand cmd = new OleDbCommand()) { cmd.Connection = odConnection; cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT * FROM [Sheet1$]"; using (OleDbDataAdapter oleda = new OleDbDataAdapter(cmd)) { oleda.Fill(rs); dataGridView4.DataSource = rs; dataGridView4.Font = new Font("MS Sans Serif", 8); } } odConnection.Close(); }
解决方案
这个问题和Visual Studio是否引入依赖库无关,本质是系统层面的ACE OLEDB驱动架构与程序编译目标不匹配导致的,和你本机安装的Office架构直接相关,按以下步骤排查即可:
- 确认Office的安装架构
打开Excel,依次进入「文件-账户-关于Excel」,在弹窗顶部可以看到当前安装的Office是32位还是64位。ACE驱动的架构必须和程序编译目标、Office架构完全一致,否则就会触发“提供程序未注册”的错误。 - 调整项目编译平台
打开Visual Studio的项目属性页,找到「生成」选项卡,将平台目标从默认的「Any CPU」修改为和Office一致的架构:64位Office选x64,32位Office选x86,必须取消勾选「首选32位」选项。修改完成后重新编译项目即可,Office 2019默认自带对应架构的ACE OLEDB驱动,多数场景下这一步就能解决问题。 - 补充安装驱动(仅第二步无效时操作)
如果你安装的是即点即用版本的Office,可能没有默认注册ACE驱动,安装对应架构的Access Database Engine即可。注意不需要修改连接字符串里的Provider字段,Microsoft.ACE.OLEDB.12.0兼容所有高版本Office的xlsx格式,随意修改版本号反而会导致匹配失败。
注意:不要同时安装32位和64位版本的ACE驱动,会和现有Office组件产生冲突。
内容的提问来源于stack exchange,提问作者Yippiekaiaii
相关产品推荐
相关产品推荐

