Kiểm tra phiên bản nội bộ của Excel được cài đặt trong .NET

Trang Cập Nhật :
Ngày tạo trang :

Môi trường hoạt động

Visual Studio
  • Visual Studio 2022
.MẠNG
  • .NET 6,0
Windows
  • cửa sổ 11
Excel
  • Microsoft 365

Điều kiện tiên quyết

Windows
  • Một trong những phiên bản
Excel
  • Một trong những phiên bản

Giới thiệu về phiên bản nội bộ

Lần này, bạn có thể kiểm tra phiên bản nội bộ của Excel theo lập trình, nhưng kể từ ngày 07/05/2023, phiên bản nội bộ của Excel 2016 trở lên không thay đổi từ 16.0. Do đó, không còn có thể xác định Excel 2016, 2019, 2021 và Microsoft 265 bằng các phiên bản nội bộ của chúng. Tuy nhiên, vì phiên bản nội bộ không thay đổi, ưu điểm là miễn là phiên bản mới không ra mắt, thư viện Excel có thể được sử dụng chung kể từ năm 2016.

Về chương trình hoạt động

Bạn có thể tìm hiểu phiên bản nội bộ nào của Excel được cài đặt với mã sau: Vì nó là một phương pháp, có thể đưa nó vào chương trình của riêng bạn như hiện tại. GetInstallExcelVersion Nếu bạn gọi phương thức, phiên bản sẽ được trả về dưới dạng số.

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

Một lời giải thích đơn giản về chương trình là sử dụng phương pháp để Excel.Application lấy loạiType.GetTypeFromProgID ID chương trình, Activator.CreateInstance Phương thức tạo ra một Excel.Application thể hiện của . Excel.Application Lý do không tạo ra một phiên bản trực tiếp của là để tránh dựa vào phiên bản của thư viện Excel bằng cách tham chiếu trực tiếp đến nó. Bằng cách này, bạn sẽ có thể xem phiên bản mới nhất.

Sau đó, bạn có thể tham khảo Version các thuộc tính từ phiên bản được tạo application và tải phiên bản. Phiên bản được truy xuất là phiên bản Excel có nội bộ. Ví dụ: Excel 2010 là 14.0, Excel 2013 là 15.0 và Excel 2016 trở lên là 16.0.

Lưu ý rằng quá trình này không khác với thực sự khởi động Excel, vì vậy nếu bạn không gọi phương thức và Excel.Application phát hành, System.Runtime.InteropServices.Marshal.ReleaseComObject quá trình Excel sẽ vẫn còn.

Nhân tiện, mã này đã được thử nghiệm trên .NET 6, nhưng tôi nghĩ nó có thể được sử dụng trong .NET Framework theo cách tương tự. Nó hoạt động trong .NET, nhưng Type.GetTypeFromProgID hãy nhớ rằng các phương thức và phương thức là mã chỉ dành cho Windows và System.Runtime.InteropServices.Marshal.ReleaseComObject sẽ không hoạt động trên các nền tảng khác.