Проверка на вътрешната версия на Excel, инсталирана в .NET

Страницата се актуализира :
Дата на създаване на страница :

Работна среда

Визуално студио
  • Визуално студио 2022
.НЕТЕН
  • .НЕТ 6.0
Уиндоус
  • Прозорци 11
Превъзхождам
  • Майкрософт 365

Предпоставки

Уиндоус
  • Една от версиите
Превъзхождам
  • Една от версиите

За вътрешните версии

Този път можете да проверите програмно вътрешната версия на Excel, но от 2023/05/07 вътрешната версия на Excel 2016 и по-нови версии не са променени от 16.0. В резултат на това вече не е възможно да се идентифицират Excel 2016, 2019, 2021 и Microsoft 265 по техните вътрешни версии. Въпреки това, тъй като вътрешната версия не се е променила, предимството е, че докато не излезе нова версия, библиотеката на Excel може да се използва общо от 2016 г. насам.

За оперативната програма

Можете да разберете коя вътрешна версия на Excel е инсталирана със следния код: Тъй като това е метод, възможно е да го донесете в собствената си програма, както е. GetInstallExcelVersion Ако извикате метода, версията ще бъде върната като номер.

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

Едно просто обяснение на програмата е да се използва метода, за да Excel.Application се получи вида наType.GetTypeFromProgID програмата ID, Activator.CreateInstance Методът създава Excel.Application екземпляр на . Excel.Application Причината да не се генерира директен екземпляр на е да се избегне разчитането на версията на библиотеката на Excel, като се препраща директно към нея. По този начин ще можете да видите най-новата версия.

След това можете да се обърнете към свойствата от генерирания application екземпляр и да Version получите версията. Версията, която се извлича, е версията, която Excel има вътрешно. Например Excel 2010 е 14.0, Excel 2013 е 15.0, а Excel 2016 и по-нови версии са 16.0.

Имайте предвид, че този процес не се различава от действителното стартиране на Excel, така че ако не извикате метода и Excel.Application не освободите , System.Runtime.InteropServices.Marshal.ReleaseComObject процесът на Excel ще остане.

Между другото, този код е тестван на .NET 6, но мисля, че може да се използва в .NET Framework по същия начин. Той работи в .NET, но Type.GetTypeFromProgID имайте предвид, че методите и методите са код само за Windows и System.Runtime.InteropServices.Marshal.ReleaseComObject няма да работят на други платформи.