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

Страница обновлена :
Дата создания страницы :

Условия эксплуатации

Визуальная студия
  • Visual Studio 2022
.СЕТЬ
  • .NET 6.0
Виндоус
  • Windows 11
Превосходить
  • Microsoft 365

Необходимые условия

Виндоус
  • Одна из версий
Превосходить
  • Одна из версий

О внутренних версиях

На этот раз вы можете проверить внутреннюю версию 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 не будут работать на других платформах.