【问题标题】:Check for installed Excel version, then load COM object library dynamically in C#检查已安装的 Excel 版本,然后在 C# 中动态加载 COM 对象库
【发布时间】:2013-05-03 11:12:53
【问题描述】:

我正在使用 Microsoft.Office.Interop.Excel 将数据写入 C# 中的 excel 文件。我使用的是 Excel 2010,所以我添加了 Microsoft Excel 14.0 对象库作为参考。但现在我需要让程序在 Excel 2003 及更高版本上运行。因此,我删除了对 Microsoft Excel 14.0 对象库的引用,现在正在寻找一种方法来检查机器上安装的 Excel 版本,然后使用它的 COM 对象库。

目前,我使用此代码检查版本,但它返回“2007”而不是“2010”。 我做错了什么?

 namespace OfficeVersionCheck
{
    using System;
    using Microsoft.Win32;

    class Program
    {
        static void Main(string[] args)
        {
            RegistryKey localMachine = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Office\");

            string version = string.Empty;

            foreach (string key in localMachine.GetSubKeyNames())
            {
                if (key == "11.0")
                    version = "2003";
                else if (key == "12.0")
                    version = "2007";
                else if (key == "14.0")
                    version = "2010";

                if (!string.IsNullOrEmpty(version))
                {
                    break;
                }
            }

            Console.Write(version);

            Console.ReadKey();
        }
    }
}

现在检查版本后,我需要加载它的 COM 对象库以在我的程序中使用。有没有办法做到这一点?任何帮助,将不胜感激。提前致谢。

【问题讨论】:

  • 为什么不直接引用“旧”Excel 2007 PIA/库?这将适用于所有后续版本的 Excel。
  • 我的机器上只安装了 Excel 2010,但我需要让我的程序在 Excel 2003 和 2007 上运行。所以,我正在考虑基于安装的 Excel 版本以编程方式添加库特定的机器。
  • 我明白,但恕我直言,这太复杂了。只需使用旧的 Excel PIA (microsoft.com/en-us/download/details.aspx?id=18346),您就不必执行所有这些操作。
  • 我猜。但我必须这样做..我需要帮助..
  • 我尝试安装 O2003PIA.MSI,但它说我必须先安装 MS Excel 2003.. 我如何引用这个旧的 Excel 2003 PIA/Library?

标签: c# excel com load interop


【解决方案1】:

您的注册表中有 12.014.0 键。

对于您问题的第二部分,请考虑使用后期绑定。有关在 C# 中使用后期绑定的更多信息,请参阅KB 302902: Binding for Office Automation Servers with Visual C# .NET.

搜索后期绑定又出一篇好文章here

【讨论】:

  • 哦,谢谢!现在,我想问一下是否有办法为特定版本的 Excel 加载 COM 对象库,以便在我的项目中使用,这样我就可以在 Excel 文件上进行编写。我怎么能这样做?
  • @jaqui 更新了我对后期绑定建议的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2014-04-27
  • 2011-06-29
  • 2017-04-22
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多