Semak versi dalaman Excel yang dipasang dalam .NET

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran operasi

Visual Studio
  • Visual Studio 2022
.BERSIH
  • .NET 6.0
Windows
  • Windows 11
Excel
  • Microsoft 365

Prasyarat

Windows
  • Salah satu versi
Excel
  • Salah satu versi

Perihal Versi Dalaman

Kali ini, anda boleh menyemak versi dalaman Excel secara programatik, tetapi pada 2023/05/07, versi dalaman Excel 2016 dan lebih baru tidak berubah daripada 16.0. Akibatnya, tidak lagi mungkin untuk mengenal pasti Excel 2016, 2019, 2021 dan Microsoft 265 dengan versi dalaman mereka. Walau bagaimanapun, memandangkan versi dalaman tidak berubah, kelebihannya ialah selagi versi baru tidak keluar, pustaka Excel boleh digunakan secara umum sejak 2016.

Mengenai program operasi

Anda boleh mengetahui versi dalaman Excel yang dipasang dengan kod berikut: Oleh kerana ia adalah kaedah, adalah mungkin untuk membawanya ke program anda sendiri kerana ia adalah. GetInstallExcelVersion Jika anda memanggil kaedah itu, versi akan dikembalikan sebagai nombor.

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

Penjelasan mudah mengenai program ini adalah menggunakan kaedah Excel.Application untuk mendapatkan jenisType.GetTypeFromProgID ID program, Activator.CreateInstance Kaedah ini mencipta Excel.Application contoh . Excel.Application Sebab untuk tidak menjana kejadian langsung adalah untuk mengelakkan bergantung pada versi pustaka Excel dengan merujuknya secara langsung. Dengan melakukan ini, anda akan dapat melihat versi terkini.

Anda kemudian boleh merujuk kepada Version sifat daripada contoh yang dijana application dan mendapatkan versi. Versi yang diambil ialah versi Excel secara dalaman. Contohnya, Excel 2010 ialah 14.0, Excel 2013 ialah 15.0 dan Excel 2016 dan lebih baru ialah 16.0.

Perhatikan bahawa proses ini tidak berbeza dengan benar-benar memulakan Excel, jadi jika anda tidak memanggil kaedah Excel.Application dan melepaskan , System.Runtime.InteropServices.Marshal.ReleaseComObject proses Excel akan kekal.

Dengan cara ini, kod ini telah diuji pada .NET 6, tetapi saya fikir ia boleh digunakan dalam Rangka Kerja .NET dengan cara yang sama. Ia berfungsi dalam .NET, tetapi Type.GetTypeFromProgID perlu diingat bahawa kaedah dan kaedah adalah kod Windows sahaja dan System.Runtime.InteropServices.Marshal.ReleaseComObject tidak akan berfungsi pada platform lain.