【问题标题】:Detect Microsoft.Office.Interop.Excel Availability检测 Microsoft.Office.Interop.Excel 可用性
【发布时间】:2012-02-29 09:03:55
【问题描述】:

我正在开发一个可以从多种不同格式导入数据的应用程序。我想包括 CSV 和其他平面文件类型(简单)以及 XLS 和 XLSX。
看起来我最好的选择是使用 Interop.Excel,据我所知,只有安装了 Excel 才能使用它。
有没有办法检查 Interop.Excel 是否可用并告诉用户必须安装 Excel 才能从 XLS/XLSX 导入?

【问题讨论】:

    标签: c# .net-4.0


    【解决方案1】:

    Microsoft.Office.Interop.Excel 是一个Office Primary Interop Assembly,无论客户端是否安装了 Office,您都可以随应用程序一起提供它。在您开始使用它之前,它不会造成任何伤害。所以在使用它之前你可以look at the registry查看是否安装了Office。

    【讨论】:

    • 检查注册表对我来说似乎很奇怪,但如果这是通常的方式,我想我会的。
    • 答案如何?检查是否安装了 office 并不一定意味着也安装了互操作组件。问题是是否可以检测到互操作程序集,而不是如何将它们添加到安装程序先决条件。可以使用反射检测程序集。
    【解决方案2】:

    如果您想支持本机 Microsoft Excel 文件并且不想依赖 Microsoft Excel,请查看 OpenXML。这仅适用于较新的 Excel XML 格式文件。如果您的需求很简单,并且只需要从旧格式的 Excel 文件或 CSV 文件中读取数据,您可以使用 Ace 提供程序和/或 Microsoft Jet OLE DB 4.0 提供程序

    OpenXML 允许您读取/写入新的 XML 格式的 Excel 文件。 StackOverflow 上有几个线程,其中包含有关使用 OpenXML 的更多信息,值得一试。

    【讨论】:

    • 这并不能解决原来的问题。您的提案仍然需要外部依赖项,最终您仍需要检查...
    • 什么外部依赖?他需要从他的项目中引用 Document.OpenXML 程序集,并且可以将它与他的应用程序一起部署。最终用户不需要安装 Excel。同样,Microsoft Jet OLEDB 4.0 提供程序与较新版本的 Windows 操作系统一起存在,并且如果需要,他的应用程序可以利用它来读取不受 OpenXML 程序集和 CSV 文件支持的旧格式电子表格。
    • @Art:问题是关于检测一个程序集。不是将其作为先决条件...您的解决方案与他最初的问题相同。最终用户确实不需要安装 Excel,而是安装 OpenOffice 或其他东西......
    • 不正确。他不需要安装 OpenOffice。 OpenXML SDK 允许您构建一个可以读/写 Microsoft Office 文件格式的应用程序。问题是关于从多种格式(包括 Excel 和 CSV)导入数据。张贴者认为 Excel 互操作是他的最佳选择,因此提示了有关机器上 Excel.Interop 的可用性的后续信息。我的回答是 Excel.Interop 不是唯一的选择,通过使用 OpenXML 等替代方法,检查程序集是否存在的依赖性变得毫无意义。
    【解决方案3】:
    【解决方案4】:

    尝试创建一个 Excel 实例。如果它产生异常,则表示未安装 Excel,互操作将不起作用。如果没有例外,那么您可以使用互操作。

    using Excel = Microsoft.Office.Interop.Excel;
    ...
    private bool CheckForExcel()
    {
        bool exists = false;
        try
        {
            var excel = new Excel.Application();
            exists = true;
        }
        catch (Exception)
        {
            ;
        }
        return exists;
    }
    

    【讨论】:

      【解决方案5】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        相关资源
        最近更新 更多