Comprova la versió interna d'Excel instal·lada en .NET

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn operatiu

Estudi visual
  • Estudi visual 2022
.XARXA
  • .NET 6.0
Windows
  • Finestres 11
Excel·lir
  • Microsoft 365

Prerequisits

Windows
  • Una de les versions
Excel·lir
  • Una de les versions

Quant a les versions internes

Aquesta vegada, podeu comprovar la versió interna d'Excel mitjançant programació, però a partir del 2023/05/07, la versió interna d'Excel 2016 i posteriors no ha canviat de 16.0. Com a resultat, ja no és possible identificar Excel 2016, 2019, 2021 i Microsoft 265 per les seves versions internes. Tanmateix, com que la versió interna no ha canviat, l'avantatge és que mentre no surti una nova versió, la biblioteca Excel es pot utilitzar en comú des del 2016.

Sobre el programa operatiu

Podeu esbrinar quina versió interna d'Excel està instal·lada amb el codi següent: Com que és un mètode, és possible portar-lo al vostre propi programa tal com és. GetInstallExcelVersion Si truqueu al mètode, la versió es retornarà com a número.

/// <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);
    }
  }
}

Una explicació senzilla del programa és utilitzar el mètode per Excel.Application obtenir el tipus d'ID delType.GetTypeFromProgID programa, Activator.CreateInstance El mètode crea una Excel.Application instància de . Excel.Application La raó per no generar una instància directa de és evitar confiar en la versió de la biblioteca d'Excel referenciant-la directament. En fer-ho, podreu veure la versió més recent.

A continuació, podeu fer referència a Version les propietats de la instància generada application i obtenir la versió. La versió que es recupera és la versió que té Excel internament. Per exemple, Excel 2010 és 14.0, Excel 2013 és 15.0 i Excel 2016 i posteriors són 16.0.

Tingueu en compte que aquest procés no és diferent d'iniciar realment Excel, de manera que si no truqueu al mètode i Excel.Application deixeu anar, System.Runtime.InteropServices.Marshal.ReleaseComObject el procés d'Excel romandrà.

Per cert, aquest codi s'ha provat a .NET 6, però crec que es pot utilitzar al .NET Framework de la mateixa manera. Funciona en .NET, però Type.GetTypeFromProgID tingueu en compte que els mètodes i mètodes són només de Windows i System.Runtime.InteropServices.Marshal.ReleaseComObject no funcionaran en altres plataformes.