Periksa versi internal Excel yang diinstal di .NET

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan operasi

Visual Studio
  • Visual Studio 2022
.JARING
  • .NET 6.0
Windows
  • jendela 11
Melampaui
  • Microsoft 365

Prasyarat

Windows
  • Salah satu versi
Melampaui
  • Salah satu versi

Tentang Versi Internal

Kali ini, Anda dapat memeriksa versi internal Excel secara terprogram, tetapi mulai 2023/05/07, versi internal Excel 2016 dan yang lebih baru tidak berubah dari 16.0. Akibatnya, tidak mungkin lagi mengidentifikasi Excel 2016, 2019, 2021, dan Microsoft 265 berdasarkan versi internalnya. Namun, karena versi internal tidak berubah, keuntungannya adalah selama versi baru tidak keluar, pustaka Excel dapat digunakan secara umum sejak 2016.

Tentang program operasi

Anda dapat mengetahui versi internal Excel mana yang diinstal dengan kode berikut: Karena ini adalah metode, dimungkinkan untuk membawanya ke program Anda sendiri apa adanya. GetInstallExcelVersion Jika Anda memanggil metode ini, versi akan dikembalikan sebagai nomor.

/// <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 sederhana dari program ini adalah dengan menggunakan metode untuk Excel.Application mendapatkan jenisType.GetTypeFromProgID ID program, Activator.CreateInstance Metode ini membuat Excel.Application instance . Excel.Application Alasan untuk tidak menghasilkan contoh langsung adalah untuk menghindari mengandalkan versi pustaka Excel dengan merujuknya secara langsung. Dengan melakukan ini, Anda akan dapat melihat versi terbaru.

Anda kemudian dapat merujuk ke Version properti dari instans yang dihasilkan application dan mendapatkan versinya. Versi yang diambil adalah versi yang dimiliki Excel secara internal. Misalnya, Excel 2010 adalah 14.0, Excel 2013 adalah 15.0, dan Excel 2016 dan yang lebih baru adalah 16.0.

Perhatikan bahwa proses ini tidak berbeda dengan benar-benar memulai Excel, jadi jika Anda tidak memanggil metode dan Excel.Application rilis, System.Runtime.InteropServices.Marshal.ReleaseComObject proses Excel akan tetap ada.

Omong-omong, kode ini telah diuji pada .NET 6, tetapi saya pikir itu dapat digunakan dalam .NET Framework dengan cara yang hampir sama. Ini berfungsi di .NET, tetapi Type.GetTypeFromProgID perlu diingat bahwa metode dan metode adalah kode khusus Windows dan System.Runtime.InteropServices.Marshal.ReleaseComObject tidak akan berfungsi pada platform lain.