Verificați versiunea internă de Excel instalată în .NET

Pagina actualizată :
Data creării paginii :

Mediu de operare

Visual Studio
  • Visual Studio 2022
.NET
  • .NET 6.0
Windows
  • Ferestre 11
Excela
  • Microsoft 365

Cerințe preliminare

Windows
  • Una dintre versiuni
Excela
  • Una dintre versiuni

Despre versiunile interne

De data aceasta, puteți verifica versiunea internă a Excel programatic, dar începând cu 07.05.2023, versiunea internă a Excel 2016 și versiunile ulterioare nu s-a modificat de la 16.0. Ca urmare, nu mai este posibil să identificați Excel 2016, 2019, 2021 și Microsoft 265 după versiunile lor interne. Cu toate acestea, deoarece versiunea internă nu s-a schimbat, avantajul este că, atâta timp cât nu apare o nouă versiune, biblioteca Excel poate fi utilizată în comun din 2016.

Despre programul de operare

Puteți afla ce versiune internă de Excel este instalată cu următorul cod: Deoarece este o metodă, este posibil să o aduceți în propriul program așa cum este. GetInstallExcelVersion Dacă apelați metoda, versiunea va fi returnată ca număr.

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

O explicație simplă a programului este utilizarea metodei pentru a Excel.Application obține tipul de ID alType.GetTypeFromProgID programului, Activator.CreateInstance Metoda creează o Excel.Application instanță de . Excel.Application Motivul pentru care nu generați o instanță directă este să evitați să vă bazați pe versiunea bibliotecii Excel referindu-se direct la aceasta. Procedând astfel, veți putea vedea cea mai recentă versiune.

Apoi puteți consulta Version proprietățile din instanța generată application și puteți obține versiunea. Versiunea regăsită este versiunea pe care Excel o are intern. De exemplu, Excel 2010 este 14.0, Excel 2013 este 15.0 și Excel 2016 și versiunile ulterioare sunt 16.0.

Rețineți că acest proces nu este diferit de pornirea efectivă a Excel, deci dacă nu apelați metoda și Excel.Application eliberați , System.Runtime.InteropServices.Marshal.ReleaseComObject procesul Excel va rămâne.

Apropo, acest cod a fost testat pe .NET 6, dar cred că poate fi folosit în .NET Framework în același mod. Funcționează în .NET, dar Type.GetTypeFromProgID rețineți că metodele și metodele sunt cod numai pentru Windows și System.Runtime.InteropServices.Marshal.ReleaseComObject nu vor funcționa pe alte platforme.