Vérifier la version interne d’Excel installée dans .NET

Page mise à jour :
Date de création de la page :

Environnement d’exploitation

Visual Studio
  • Visual Studio 2022
.FILET
  • .NET 6.0
Windows
  • Fenêtres 11
Exceller
  • Microsoft 365 (en anglais)

Conditions préalables

Windows
  • L’une des versions
Exceller
  • L’une des versions

À propos des versions internes

Cette fois, vous pouvez vérifier la version interne d’Excel par programmation, mais à partir du 07/05/2023, la version interne d’Excel 2016 et versions ultérieures n’a pas changé par rapport à la version 16.0. Par conséquent, il n’est plus possible d’identifier Excel 2016, 2019, 2021 et Microsoft 265 par leurs versions internes. Cependant, comme la version interne n’a pas changé, l’avantage est que tant qu’une nouvelle version ne sort pas, la bibliothèque Excel peut être utilisée en commun depuis 2016.

À propos du programme d’exploitation

Vous pouvez savoir quelle version interne d’Excel est installée avec le code suivant : Puisqu’il s’agit d’une méthode, il est possible de l’apporter à votre propre programme tel quel. GetInstallExcelVersion Si vous appelez la méthode, la version sera renvoyée sous la forme d’un nombre.

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

Une explication simple du programme est d’utiliser la méthode pour Excel.Application obtenir le type d’ID duType.GetTypeFromProgID programme, Activator.CreateInstance La méthode crée une Excel.Application instance de . Excel.Application La raison de ne pas générer d’instance directe de est d’éviter de s’appuyer sur la version de la bibliothèque Excel en la référençant directement. En faisant cela, vous pourrez voir la dernière version.

Vous pouvez ensuite vous référer aux Version propriétés de l’instance générée application et obtenir la version. La version récupérée est la version qu’Excel possède en interne. Par exemple, Excel 2010 est 14.0, Excel 2013 est 15.0 et Excel 2016 et versions ultérieures sont 16.0.

Notez que ce processus n’est pas différent du démarrage réel d’Excel, donc si vous n’appelez pas la méthode et Excel.Application relâchez , System.Runtime.InteropServices.Marshal.ReleaseComObject le processus Excel restera.

Soit dit en passant, ce code a été testé sur .NET 6, mais je pense qu’il peut être utilisé dans le .NET Framework de la même manière. Cela fonctionne dans .NET, mais Type.GetTypeFromProgID gardez à l’esprit que les méthodes et les méthodes sont du code Windows uniquement et System.Runtime.InteropServices.Marshal.ReleaseComObject ne fonctionneront pas sur d’autres plates-formes.