【C#】Officeのバージョンを取得する

■ きっかけ

http://blogs.yahoo.co.jp/dk521123/29462017.html
より

「最大行数は、Excelのバージョンにより異なる」など
バージョンによって動作を変えることも起こりえるので調べた。

■ サンプル

Officeバージョン取得処理

using System.Reflection;


public enum OfficeVersion
{
    None,
    NotSupportedVersion,
    Office2000,
    Office2002,
    Office2003,
    Office2007,
    Office2010,
}

public OfficeVersion GetOfficeVersion(string applicationID)
{
    // Excelアプリケーションに接続
    var type = Type.GetTypeFromProgID(applicationID);
    var application = Activator.CreateInstance(type);
    if (application == null)
    {
        // 未インストールの場合
        return OfficeVersion.None;
    }

    // バージョンを取得
    var ver = 
        application.GetType().InvokeMember(
        "Version", BindingFlags.GetProperty, null, application, null);
    double version;
    if(!Double.TryParse(ver.ToString(), out version))
    {
        return OfficeVersion.None;
    }
    else if (version >= 14.0)
    {
        // Office2010インストール済みの場合
        return OfficeVersion.Office2010;
    }
    else if (version >= 12.0)
    {
        // Office2007インストール済みの場合
        return OfficeVersion.Office2007;
    }
    else if (version >= 11.0)
    {
        // Office2003インストール済みの場合
        return OfficeVersion.Office2003;
    }
    else if (version >= 10.0)
    {
        // Office XP(2002)インストール済みの場合
        return OfficeVersion.Office2002;
    }
    else if (version >= 9.0)
    {
        // Office 2000インストール済みの場合
        return OfficeVersion.Office2000;
    }
    else
    {
        // Office 2000より前のバージョン
        return OfficeVersion.NotSupportedVersion;
    }
}

使用例

private void button1_Click(object sender, EventArgs e)
{
    var excelVersion = this.GetOfficeVersion("Excel.Application");

    string result;
    switch (excelVersion)
    {
        case OfficeVersion.Office2000:
            result = "Office2000";
            break;
        case OfficeVersion.Office2002:
            result = "Office2002";
            break;
        case OfficeVersion.Office2003:
            result = "Office2003";
            break;
        case OfficeVersion.Office2007:
            result = "Office2007";
            break;
        case OfficeVersion.Office2010:
            result = "Office2010";
            break;
        default:
            result = "No Excel";
            break;
    }

    this.label1.Text = result;
}