Перевірте внутрішню версію Excel, встановлену в .NET

Сторінка оновлюється :
Дата створення сторінки :

Робоче середовище

Візуальна студія
  • Visual Studio 2022
.МЕРЕЖІ
  • .NET 6.0
Вікна
  • Вікна 11
Excel
  • Microsoft 365

Передумови

Вікна
  • Одна з версій
Excel
  • Одна з версій

Про внутрішні версії

Цього разу ви можете перевірити внутрішню версію Excel програмним шляхом, але станом на 07.05.2023 внутрішня версія 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 типу програми, Activator.CreateInstance Метод створює Excel.Application екземпляр . Excel.Application Причина відсутності створення прямого екземпляра полягає в тому, щоб уникнути покладання на версію бібліотеки Excel, посилаючись на неї безпосередньо. Зробивши це, ви зможете побачити останню версію.

Потім ви можете звернутися до Version властивостей зі створеного application екземпляра та отримати версію. Отримана версія – це версія, яку має 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 не працюватимуть на інших платформах.