Controllare la versione interna di Excel installata in .NET

Pagina aggiornata :
Data di creazione della pagina :

Ambiente operativo

Visual Studio
  • Visual Studio 2022
.RETE
  • .NET 6.0
Finestre
  • finestre 11
Eccellere
  • Microsoft 365

Prerequisiti

Finestre
  • Una delle versioni
Eccellere
  • Una delle versioni

Informazioni sulle versioni interne

Questa volta, puoi controllare la versione interna di Excel a livello di codice, ma a partire dal 07/05/2023, la versione interna di Excel 2016 e successive non è cambiata rispetto alla 16.0. Di conseguenza, non è più possibile identificare Excel 2016, 2019, 2021 e Microsoft 265 in base alle versioni interne. Tuttavia, poiché la versione interna non è cambiata, il vantaggio è che finché non esce una nuova versione, la libreria Excel può essere utilizzata in comune dal 2016.

Informazioni sul programma operativo

È possibile scoprire quale versione interna di Excel è installata con il codice seguente: Poiché si tratta di un metodo, è possibile portarlo nel proprio programma così com'è. GetInstallExcelVersion Se si chiama il metodo, la versione verrà restituita come numero.

/// <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 semplice spiegazione del programma consiste nell'utilizzare il metodo per Excel.Application ottenere il tipo di ID delType.GetTypeFromProgID programma, Activator.CreateInstance Il metodo crea un'istanza Excel.Application di . Excel.Application Il motivo per cui non viene generata un'istanza diretta di è quello di evitare di basarsi sulla versione della libreria di Excel facendo riferimento direttamente ad essa. In questo modo, sarai in grado di vedere l'ultima versione.

È quindi possibile fare riferimento alle Version proprietà dell'istanza generata application e ottenere la versione. La versione recuperata è la versione di Excel interna. Ad esempio, Excel 2010 è 14.0, Excel 2013 è 15.0 ed Excel 2016 e versioni successive sono 16.0.

Si noti che questo processo non è diverso dall'avvio effettivo di Excel, quindi se non si chiama il metodo e Excel.Application si rilascia , System.Runtime.InteropServices.Marshal.ReleaseComObject il processo di Excel rimarrà.

A proposito, questo codice è stato testato su .NET 6, ma penso che possa essere usato in .NET Framework più o meno allo stesso modo. Funziona in .NET, ma Type.GetTypeFromProgID tieni presente che i metodi e i metodi sono codice solo per Windows e System.Runtime.InteropServices.Marshal.ReleaseComObject non funzioneranno su altre piattaforme.