C# 检测Microsoft.Office.Interop.Excel的可用性

C# 检测Microsoft.Office.Interop.Excel的可用性,c#,.net-4.0,C#,.net 4.0,我正在开发一个可以从几种不同格式导入数据的应用程序。我希望包括CSV和其他平面文件类型(easy)以及XLS和XLSX。 看来我最好的选择是使用Interop.Excel,我知道只有安装了Excel,Interop.Excel才可用。 是否有方法检查Interop.Excel是否可用,并告诉用户必须安装Excel才能从XLS/XLSX导入?Microsoft.Office.Interop.Excel是一种可以随应用程序一起提供的工具,无论客户端是否安装了Office。在你开始使用它之前,它不会造

我正在开发一个可以从几种不同格式导入数据的应用程序。我希望包括CSV和其他平面文件类型(easy)以及XLS和XLSX。
看来我最好的选择是使用Interop.Excel,我知道只有安装了Excel,Interop.Excel才可用。

是否有方法检查Interop.Excel是否可用,并告诉用户必须安装Excel才能从XLS/XLSX导入?

Microsoft.Office.Interop.Excel
是一种可以随应用程序一起提供的工具,无论客户端是否安装了Office。在你开始使用它之前,它不会造成任何伤害。因此,在使用它之前,您可以查看是否安装了Office

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


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

这可能适用于项目的属性:


您可以尝试使用此处详述的概念:

而且:


只需尝试创建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;
}

这并不能解决原来的问题。你的提案仍然需要一个外部依赖,最终你还需要检查…什么是外部依赖?他需要从他的项目中引用Document.OpenXML程序集,并将其与应用程序一起部署。最终用户不需要安装Excel。同样,Microsoft Jet OLEDB 4.0提供程序随Windows操作系统的更新版本一起提供,如果需要,应用程序可以利用它读取OpenXML程序集和CSV文件不支持的旧格式电子表格。@Art:问题是关于检测程序集。不是把它作为先决条件。。。你的解决方案和他最初的问题一样。最终用户确实不需要安装Excel,但需要安装OpenOffice或其他els…不正确。他不需要安装OpenOffice。OpenXMLSDK允许您构建一个可以读/写Microsoft Office文件格式的应用程序。问题是从服务器格式(包括Excel和CSV)导入数据。海报认为Excel Interop是他最好的选择,因此促使人们继续关注Excel.Interop在计算机上的可用性。我的回答是Excel.Interop不是唯一的选项,通过使用OpenXML等替代方法,检查程序集是否存在的依赖性变得毫无意义。检查注册表对我来说似乎很奇怪,但如果通常是这样做的,我想我会的。这是怎么回答的?检查是否安装了office并不一定意味着也安装了互操作组件。问题在于是否可以检测到互操作程序集,而不是如何将它们添加到安装程序prereq中。可以使用反射检测程序集。