【问题标题】:Problem with Excel file reading with C# , ACE problem使用 C# 读取 Excel 文件的问题,ACE 问题
【发布时间】:2020-10-29 18:47:09
【问题描述】:

我已经阅读了很多关于这个问题的信息。
SO中有很多问题,但问题仍然存在,如下:

我知道这个connection string 适用于旧版 Office:

string oldCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
              + path + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'";

我知道 较新 版本的 Office 有这个 connection string

string nweCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
              + path + ";Extended Properties=Excel 12.0;";

但是,当我将 connection string 用于具有 ACE 的较新版本时,出现此错误:

“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。

我还阅读了其他问题,我应该先安装 ACE,一切都会正常工作。

  • 我没有安装 ACE 驱动程序,也没有安装应该使用此应用程序的其他计算机,有没有办法使用 Office 2016 的 JET 读取 Excel 文件或365(2003 年以上的所有内容)。

  • 我无法在我的每个客户端中都安装 ACE 以便能够使用我的应用程序,这根本不实用。

有没有办法做到这一点?

【问题讨论】:

  • 您可能可以在注册表中的 HKEY_CLASSES_ROOT 下查找名为 Microsoft.ACE.OLEDB.* 的键以查看已安装的内容。但是,如果您不能自己安装它,并且不能依赖它的安装,您可能需要使用其他一些机制来读取 Excel 文件 - 有些库可以在不依赖任何安装的情况下读取它们,但我不'认为他们没有类似 OleDB 的接口。
  • @Rup ,可以帮我解决这个问题吗?
  • 抱歉,我之前从未使用过这些。
  • 不是我的领域,但您的应用程序是否编译为与目标计算机上的 Office 版本相同的位数 (32 v 64)?
  • @Rory,是的,但这不是问题,问题是我希望我的应用程序也可以在其他机器上运行,不仅是我的,这是我卡住的地方

标签: c# excel connection-string oledb ms-jet-ace


【解决方案1】:

多年前我不得不解决完全相同的问题。我将两个连接字符串都添加到了我的配置中。第一次使用该应用程序时,我会检查一个 ACE 驱动程序(因为它较新)。如果失败,我将退回到 Jet。将工作连接字符串保存在 AppConfig 中(您也可以将值保存到配置中)。所以下次你运行应用程序时,它会首先检查应用程序配置并在该机器上使用该连接字符串。

这是我遵循的步骤:

  1. 当应用程序在机器上首次启动/使用时,尝试从 AppConfig 获取工作连接字符串。
  2. 由于它不可用,请查看可能的连接字符串列表。
  3. 从 ACE 驱动程序开始。成功了,保存在AppConfig中。
  4. 如果 ACE 失败,请检查下一个驱动程序 (Jet)。如果成功,将其保存为工作连接字符串。
  5. 下次启动应用程序时,检查工作连接字符串并继续。这样您就不会一次又一次地检查两个驱动程序。

注意:当您将设置更新为 AppConfig 文件时,它们不会直接更新为原始文件。在 C:\Users...下为该用户创建文件的副本。当您尝试从 AppConfig 加载值时,这两个被“合并”并使用。这是在 C# 中自动处理的。

根据上述情况,如果您必须重置选择,则必须删除上述用户文件夹中的配置文件,这应该再次从第 1 步开始。

【讨论】:

  • 谢谢你的回答,但是当电脑没有ACE驱动,我想读取一些.xlsx文件时会发生什么,那我该怎么办呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多