.NET Framework でインストールされている Excel のバージョンを確認する

概要

.NET Framework のプログラムからインストールされている Excel のバージョンを取得します。

動作環境

Excel
  • Excel 2010
.NET Framework
  • .NET Framework 4
  • .NET Framework 4.5

動作確認環境

Excel
  • Excel 2010
.NET Framework
  • .NET Framework 4
  • .NET Framework 4.5

内容

インストールされている Excel のバージョンを取得するには Type.GetTypeFromProgID メソッドを使用して Excel.Application のタイプを取得し、Activator.CreateInstance メソッドでインスタンスを生成します。直接 Excel.Application のインスタンスを生成しないのは、直接参照することによってバージョンに依存してしまうことを回避するためです。この方法をとることにより、最新のバージョンを参照することができるようになります。

あとは生成された application インスタンスから Version プロパティを参照し、バージョンを取得することができます。取得されるバージョンは Excel が内部に持つバージョンです。例えば、Excel 2010 は 14.0, Excel 2013 は 15.0 となります。

また、これらのクラスを使用するには using で「System.Reflection」と「System.Runtime.InteropServices」の設定が必要です。

/// <summary>
/// インストールされている Excel のバージョンを取得します。
/// </summary>
/// <returns>インストールされている Excel のバージョン。</returns>
public static decimal GetInstallExcelVersion()
{
  // Excelアプリケーションに接続
  var type = Type.GetTypeFromProgID("Excel.Application");
  object application = null;
  try
  {
    application = Activator.CreateInstance(type);

    if (application == null)
    {
      // 未インストールの場合
      return 0;
    }

    // バージョンを取得
    var ver =
        application.GetType().InvokeMember(
        "Version", BindingFlags.GetProperty, null, application, null);

    decimal version;
    if (!decimal.TryParse(ver.ToString(), out version))
    {
      return 0;
    }
    return version;
  }
  finally
  {
    if (application != null)
    {
      Marshal.ReleaseComObject(application);
    }
  }
}

他のサイトでも同様の説明になっているところがありますが、いくつかのサイトでは Marshal.ReleaseComObject による application の解放をしていないところがあります。これを忘れると Excel のプロセスが残ったままになってしまいますので finally で確実に解放するようにしておきましょう。