Verifique a versão interna do Excel instalada no .NET

Página atualizada :
Data de criação de página :

Ambiente operacional

Estúdio Visual
  • Visual Studio 2022
.REDE
  • .NET 6.0
Windows
  • Janelas 11
Distinguir-se
  • Microsoft 365

Pré-requisitos

Windows
  • Uma das versões
Distinguir-se
  • Uma das versões

Sobre versões internas

Desta vez, você pode verificar a versão interna do Excel programaticamente, mas a partir de 2023/05/07, a versão interna do Excel 2016 e posterior não mudou de 16.0. Como resultado, não é mais possível identificar o Excel 2016, 2019, 2021 e Microsoft 265 por suas versões internas. No entanto, como a versão interna não mudou, a vantagem é que, desde que uma nova versão não saia, a biblioteca do Excel pode ser usada em comum desde 2016.

Sobre o programa operacional

Você pode descobrir qual versão interna do Excel está instalada com o seguinte código: Como é um método, é possível trazê-lo para o seu próprio programa como ele é. GetInstallExcelVersion Se você chamar o método, a versão será retornada como um número.

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

Uma explicação simples do programa é usar o método para Excel.Application obter o tipo de ID doType.GetTypeFromProgID programa, Activator.CreateInstance O método cria uma Excel.Application instância de . Excel.Application A razão para não gerar uma instância direta de é evitar confiar na versão da biblioteca do Excel referenciando-a diretamente. Ao fazer isso, você será capaz de ver a versão mais recente.

Em seguida, você pode consultar Version as propriedades da instância gerada application e obter a versão. A versão recuperada é a versão que o Excel tem internamente. Por exemplo, o Excel 2010 é 14.0, o Excel 2013 é 15.0 e o Excel 2016 e posterior são 16.0.

Observe que esse processo não é diferente de realmente iniciar o Excel, portanto, se você não chamar o método e Excel.Application liberar, System.Runtime.InteropServices.Marshal.ReleaseComObject o processo do Excel permanecerá.

A propósito, esse código foi testado no .NET 6, mas acho que ele pode ser usado no .NET Framework da mesma maneira. Ele funciona no .NET, mas Type.GetTypeFromProgID tenha em mente que os métodos e métodos são código somente do Windows e System.Runtime.InteropServices.Marshal.ReleaseComObject não funcionarão em outras plataformas.