ตรวจสอบเวอร์ชันภายในของ Excel ที่ติดตั้งใน .NET

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมการทํางาน

วิชวลสตูดิโอ
  • Visual Studio 2022
ตาข่าย
  • .NET 6.0
หน้าต่าง
  • หน้าต่าง 11
ยอดเยี่ยม
  • ไมโครซอฟท์ 365

ข้อกําหนดเบื้องต้น

หน้าต่าง
  • หนึ่งในรุ่น
ยอดเยี่ยม
  • หนึ่งในรุ่น

เกี่ยวกับเวอร์ชันภายใน

คราวนี้คุณสามารถตรวจสอบเวอร์ชันภายในของ Excel โดยทางโปรแกรม แต่ตั้งแต่วันที่ 2023/05/07 เวอร์ชันภายในของ Excel 2016 และใหม่กว่าจะไม่เปลี่ยนแปลงจาก 16.0 ด้วยเหตุนี้ จึงไม่สามารถระบุ Excel 2016, 2019, 2021 และ Microsoft 265 ด้วยเวอร์ชันภายในได้อีกต่อไป อย่างไรก็ตามเนื่องจากเวอร์ชันภายในไม่เปลี่ยนแปลงข้อดีคือตราบใดที่เวอร์ชันใหม่ไม่ออกมาไลบรารี Excel สามารถใช้ร่วมกันได้ตั้งแต่ปี 2559

เกี่ยวกับโปรแกรมปฏิบัติการ

คุณสามารถค้นหาว่า 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 จะไม่ทํางานบนแพลตฟอร์มอื่น