Kontrollera den interna versionen av Excel som är installerad i .NET

Sidan uppdaterad :
Datum för skapande av sida :

Omvärld

Visuell studio
  • Visual Studio 2022
.NÄT
  • .NET 6.0
Windows
  • Windows 11 (på engelska)
Överträffa
  • Microsoft 365 (på engelska)

Förutsättningar

Windows
  • En av versionerna
Överträffa
  • En av versionerna

Om interna versioner

Den här gången kan du kontrollera den interna versionen av Excel programmatiskt, men från och med 2023-05-07 har den interna versionen av Excel 2016 och senare inte ändrats från 16.0. Därför är det inte längre möjligt att identifiera Excel 2016, 2019, 2021 och Microsoft 265 med deras interna versioner. Men eftersom den interna versionen inte har ändrats är fördelen att så länge en ny version inte kommer ut kan Excel-biblioteket användas gemensamt sedan 2016.

Om verksamhetsprogrammet

Du kan ta reda på vilken intern version av Excel som är installerad med följande kod: Eftersom det är en metod är det möjligt att ta med den till ditt eget program som den är. GetInstallExcelVersion Om du anropar metoden returneras versionen som ett tal.

/// <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 enkel förklaring av programmet är att använda metoden för att Excel.Application få fram typen avType.GetTypeFromProgID program-ID, Activator.CreateInstance Metoden skapar en Excel.Application instans av . Excel.Application Anledningen till att inte generera en direkt instans av är att undvika att förlita sig på versionen av Excel-biblioteket genom att referera till den direkt. Genom att göra detta kommer du att kunna se den senaste versionen.

Du kan sedan referera till Version egenskaperna från den genererade application instansen och hämta versionen. Den version som hämtas är den version som Excel har internt. Excel 2010 är till exempel 14.0, Excel 2013 är 15.0 och Excel 2016 och senare är 16.0.

Observera att den här processen inte skiljer sig från att faktiskt starta Excel, så om du inte anropar metoden och Excel.Application släpper kommer System.Runtime.InteropServices.Marshal.ReleaseComObject Excel-processen att finnas kvar.

Den här koden har förresten testats på .NET 6, men jag tror att den kan användas i .NET Framework på ungefär samma sätt. Det fungerar i .NET, men Type.GetTypeFromProgID tänk på att metoderna och metoderna endast är Windows-kod och System.Runtime.InteropServices.Marshal.ReleaseComObject inte fungerar på andra plattformar.