Controleer de interne versie van Excel die is geïnstalleerd in .NET

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Werkomgeving

Visual Studio
  • Visual Studio 2022
.NET
  • .NET 6.0
Ramen
  • Vensters 11
Uitblinken
  • Microsoft 365

Voorwaarden

Ramen
  • Een van de versies
Uitblinken
  • Een van de versies

Informatie over interne versies

Deze keer kunt u de interne versie van Excel programmatisch controleren, maar vanaf 2023/05/07 is de interne versie van Excel 2016 en later niet gewijzigd ten opzichte van 16.0. Als gevolg hiervan is het niet langer mogelijk om Excel 2016, 2019, 2021 en Microsoft 265 te identificeren aan de hand van hun interne versies. Aangezien de interne versie echter niet is gewijzigd, is het voordeel dat zolang er geen nieuwe versie uitkomt, de Excel-bibliotheek sinds 2016 gemeenschappelijk kan worden gebruikt.

Over het besturingsprogramma

U kunt achterhalen welke interne versie van Excel is geïnstalleerd met de volgende code: Omdat het een methode is, is het mogelijk om het naar je eigen programma te brengen zoals het is. GetInstallExcelVersion Als u de methode aanroept, wordt de versie geretourneerd als een nummer.

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

Een eenvoudige uitleg van het programma is om de methode te gebruiken om het typeType.GetTypeFromProgID programma-ID te Excel.Application krijgen, Activator.CreateInstance De methode maakt een Excel.Application instantie van . Excel.Application De reden voor het niet genereren van een direct exemplaar van is om te voorkomen dat u afhankelijk bent van de versie van de Excel-bibliotheek door er rechtstreeks naar te verwijzen. Door dit te doen, kunt u de nieuwste versie zien.

U kunt dan verwijzen naar Version de eigenschappen van de gegenereerde application instantie en de versie ophalen. De versie die wordt opgehaald is de versie die Excel intern heeft. Excel 2010 is bijvoorbeeld 14,0, Excel 2013 is 15,0 en Excel 2016 en hoger zijn 16,0.

Merk op dat dit proces niet anders is dan het daadwerkelijk starten van Excel, dus als u de methode en Excel.Application release niet aanroept, System.Runtime.InteropServices.Marshal.ReleaseComObject blijft het Excel-proces bestaan.

Trouwens, deze code is getest op .NET 6, maar ik denk dat het op vrijwel dezelfde manier in het .NET Framework kan worden gebruikt. Het werkt in .NET, maar Type.GetTypeFromProgID houd er rekening mee dat de methoden en methoden alleen Windows-code zijn en System.Runtime.InteropServices.Marshal.ReleaseComObject niet werken op andere platforms.