Verifique la versión interna de Excel instalada en .NET

Actualización de la página :
Fecha de creación de la página :

Entorno operativo

Visual Studio
  • Visual Studio 2022
.RED
  • .NET 6.0
Windows
  • Windows 11
Sobresalir
  • Microsoft 365

Prerrequisitos

Windows
  • Una de las versiones
Sobresalir
  • Una de las versiones

Acerca de las versiones internas

Esta vez, puede verificar la versión interna de Excel mediante programación, pero a partir del 07/05/2023, la versión interna de Excel 2016 y posteriores no ha cambiado desde la 16.0. Como resultado, ya no es posible identificar Excel 2016, 2019, 2021 y Microsoft 265 por sus versiones internas. Sin embargo, dado que la versión interna no ha cambiado, la ventaja es que mientras no salga una nueva versión, la biblioteca de Excel se puede usar en común desde 2016.

Sobre el programa operativo

Puede averiguar qué versión interna de Excel está instalada con el siguiente código: Dado que es un método, es posible llevarlo a su propio programa tal como está. GetInstallExcelVersion Si llama al método, la versión se devolverá como un 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ón simple del programa es usar el método para Excel.Application obtener el tipo de ID delType.GetTypeFromProgID programa, Activator.CreateInstance El método crea una Excel.Application instancia de . Excel.Application La razón para no generar una instancia directa de es evitar depender de la versión de la biblioteca de Excel haciendo referencia a ella directamente. Al hacer esto, podrá ver la última versión.

A Version continuación, puede consultar las propiedades de la instancia generada application y obtener la versión. La versión que se recupera es la versión que Excel tiene internamente. Por ejemplo, Excel 2010 es 14.0, Excel 2013 es 15.0 y Excel 2016 y versiones posteriores son 16.0.

Tenga en cuenta que este proceso no es diferente de iniciar Excel, por lo que si no llama al método y Excel.Application lo libera, System.Runtime.InteropServices.Marshal.ReleaseComObject el proceso de Excel permanecerá.

Por cierto, este código se ha probado en .NET 6, pero creo que se puede usar en .NET Framework de la misma manera. Funciona en .NET, pero Type.GetTypeFromProgID tenga en cuenta que los métodos y métodos son código solo de Windows y System.Runtime.InteropServices.Marshal.ReleaseComObject no funcionarán en otras plataformas.