Kontroller den interne version af Excel, der er installeret i .NET

Side opdateret :
Dato for oprettelse af side :

Driftsmiljø

Visual Studio
  • Visual Studio 2022
.NET
  • .NET 6.0
Windows
  • Windows 11
Excel
  • Microsoft 365

Forudsætninger

Windows
  • En af versionerne
Excel
  • En af versionerne

Om interne versioner

Denne gang kan du kontrollere den interne version af Excel programmatisk, men fra 2023/05/07 er den interne version af Excel 2016 og nyere ikke ændret fra 16.0. Som et resultat er det ikke længere muligt at identificere Excel 2016, 2019, 2021 og Microsoft 265 ved deres interne versioner. Men da den interne version ikke er ændret, er fordelen, at så længe en ny version ikke kommer ud, kan Excel-biblioteket bruges til fælles siden 2016.

Om driftsprogrammet

Du kan finde ud af, hvilken intern version af Excel der er installeret med følgende kode: Da det er en metode, er det muligt at bringe det til dit eget program, som det er. GetInstallExcelVersion Hvis du kalder metoden, returneres versionen som et 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);
    }
  }
}

En simpel forklaring af programmet er at bruge metoden til at Excel.Application få typen afType.GetTypeFromProgID program-id, Activator.CreateInstance Metoden opretter en Excel.Application forekomst af . Excel.Application Årsagen til ikke at generere en direkte forekomst af er at undgå at stole på versionen af Excel-biblioteket ved at henvise direkte til den. Ved at gøre dette vil du kunne se den nyeste version.

Du kan derefter henvise til Version egenskaberne fra den genererede application forekomst og hente versionen. Den version, der hentes, er den version, som Excel har internt. Excel 2010 er f.eks. 14.0, Excel 2013 er 15.0, og Excel 2016 og nyere er 16.0.

Bemærk, at denne proces ikke adskiller sig fra faktisk at starte Excel, så hvis du ikke kalder metoden og Excel.Application frigiver , System.Runtime.InteropServices.Marshal.ReleaseComObject forbliver Excel-processen.

Forresten er denne kode blevet testet på .NET 6, men jeg tror, den kan bruges i .NET Framework på stort set samme måde. Det fungerer i .NET, men Type.GetTypeFromProgID husk, at metoderne og metoderne kun er Windows-kode og System.Runtime.InteropServices.Marshal.ReleaseComObject ikke fungerer på andre platforme.