בדוק את הגירסה הפנימית של Excel המותקנת ב- .NET

עודכן דף :
תאריך יצירת דף :

סביבת הפעלה

Visual Studio
  • Visual Studio 2022
.רשת
  • .NET 6.0
חלונות
  • חלונות 11
הצטיין
  • Microsoft 365

דרישות מוקדמות

חלונות
  • אחת הגרסאות
הצטיין
  • אחת הגרסאות

אודות גירסאות פנימיות

הפעם, אתה יכול לבדוק את הגירסה הפנימית של Excel באופן תכנותי, אבל נכון ל 2023/05/07, הגירסה הפנימית של Excel 2016 ואילך לא השתנתה מ 16.0. כתוצאה מכך, לא ניתן עוד לזהות את Excel 2016, 2019, 2021 ו- Microsoft 265 לפי הגירסאות הפנימיות שלהם. עם זאת, מאז הגרסה הפנימית לא השתנה, היתרון הוא שכל עוד גרסה חדשה לא יוצאת, ספריית Excel ניתן להשתמש במשותף מאז 2016.

על תוכנית ההפעלה

באפשרותך לגלות איזו גירסה פנימית של 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 יפעלו בפלטפורמות אחרות.