NET에 설치된 Excel의 내부 버전 확인

페이지 업데이트 :
페이지 생성 날짜 :

운영 환경

비주얼 스튜디오
  • 비주얼 스튜디오 2022
.그물
  • .NET 6.0
윈도우
  • 윈도우 11
뛰어나다
  • 마이크로소프트 365

필수 구성 요소

윈도우
  • 버전 중 하나
뛰어나다
  • 버전 중 하나

내부 버전 정보

이번에는 엑셀의 내부 버전을 프로그래밍 방식으로 확인할 수 있습니다만, 2023/05/07 현재 엑셀 2016 이상의 내부 버전은 16.0에서 변경되지 않았습니다. 따라서 더 이상 내부 버전으로 Excel 2016, 2019, 2021 및 Microsoft 265를 식별할 수 없습니다. 다만, 내부 버전은 바뀌지 않았기 때문에, 새로운 버전이 나오지 않는 한, 2016년부터 엑셀 라이브러리를 공통으로 사용할 수 있다는 장점이 있습니다.

운영 프로그램 정보

다음 코드를 사용하여 설치된 Excel의 내부 버전을 확인할 수 있습니다. 방법이기 때문에 그대로 자신의 프로그램에 가져올 수 있습니다. GetInstallExcelVersion 메서드를 호출하면 버전이 숫자로 반환됩니다.

/// <summary>
/// インストールされている Excel の内部バージョンを取得します。
/// </summary>
/// <returns>インストールされている Excel の内部バージョン。正常に取得できなかった場合は 0 を返します。</returns>
static decimal GetInstallExcelVersion()
{
  // Excel.Application の Type を取得
  var type = Type.GetTypeFromProgID("Excel.Application");
  if (type == null)
  {
    // Excel がインストールされていない
    return 0;
  }

  object? application = null;
  try
  {
    // Excel.Application のインスタンスを生成します
    application = Activator.CreateInstance(type);
    if (application == null)
    {
      // Excel.Application の生成に失敗
      return 0;
    }

    // バージョンを取得
    var ver = application.GetType().InvokeMember("Version", System.Reflection.BindingFlags.GetProperty, null, application, null);
    if (ver == null)
    {
      return 0;
    }

    // 文字列を数値に変換します
    decimal version;
    if (!decimal.TryParse(ver.ToString(), out version))
    {
      return 0;
    }
    return version;
  }
  finally
  {
    // 生成した Excel のリソースを解放します
    if (application != null)
    {
      System.Runtime.InteropServices.Marshal.ReleaseComObject(application);
    }
  }
}

프로그램에 대한 간단한 설명은이 방법을 사용하여 프로그램 ID 유형을Type.GetTypeFromProgID 가져 오는 것입니다 Excel.Application . Activator.CreateInstance 이 메서드는 Excel.Application 의 인스턴스를 만듭니다. Excel.Application 의 직접 인스턴스를 생성하지 않는 이유는 Excel 라이브러리의 버전을 직접 참조하여 사용하는 것을 방지하기 위해서입니다. 이렇게 하면 최신 버전을 볼 수 있습니다.

그런 다음 생성된 application 인스턴스에서 속성을 참조 Version 하고 버전을 가져올 수 있습니다. 검색되는 버전은 Excel이 내부적으로 가지고 있는 버전입니다. 예를 들어 Excel 2010은 14.0, Excel 2013은 15.0, Excel 2016 이상은 16.0입니다.

이 프로세스는 실제로 Excel을 시작하는 것과 다르지 않으므로 메서드를 호출하고 Excel.Application 릴리스 System.Runtime.InteropServices.Marshal.ReleaseComObject 하지 않으면 Excel 프로세스가 유지됩니다.

그건 그렇고,이 코드는 .NET 6에서 테스트되었지만 .NET Framework에서도 거의 같은 방식으로 사용할 수 있다고 생각합니다. NET에서 작동하지만 Type.GetTypeFromProgID 메서드와 메서드는 Windows 전용 코드이며 System.Runtime.InteropServices.Marshal.ReleaseComObject 다른 플랫폼에서는 작동하지 않습니다.