kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

インストールされているExcelのバージョンによって処理を分ける方法

Visual C#で、Excelファイルを読み込むようなことを考えています。Excelファイルの読み込み用のライブラリは、ExcelアプリケーションをCOM経由で呼ぶ想定です。この場合、使用するライブラリ(Microsoft Excel 12.0 Object Libraryなど)は、動作環境によって切り替える必要があります。

Excel2007がインストールされている環境では"Microsoft Excel 12.0 Object Library"、Excel2003の環境では、"Microsoft Excel 11.0 Object Library"など。

動作環境が複数あり、各々のPCにインストールされているExcelのバージョンが異なる場合、インストール済みのExcelバージョンを判断する方法を調査してみました。

次のようにすると、Excelバージョンによって、処理を分岐することが出来ました。

using System;
using System.Reflection;

    // Excelアプリケーションに接続
    Type classType = Type.GetTypeFromProgID("Excel.Application");
    object app = Activator.CreateInstance(classType);
    if (app == null) {
        // 未インストールの場合
    }

    // バージョンを取得
    object versionObj = app.GetType().InvokeMember(
        "Version", BindingFlags.GetProperty, null, app, null);
    string version = versionObj.ToString();
    
    if ("11.0".Equals(version))
    {
        // Office2003インストール済みの場合
    }
    else if ("12.0".Equals(version))
    {
        // Office2007インストール済みの場合
    }
    else if ("14.0".Equals(version))
    {
        // Office2010インストール済みの場合
    }

動作環境

  • OS : Windows 7
  • Visual C# : 2008 Express Edition
  • Office : 2007