檢查 .NET 中安裝的 Excel 的內部版本
操作環境
- Visual Studio的
-
- Visual Studio 2022 中
- 。網
-
- .NET 6.0
- 窗戶
-
- 窗戶11
- 勝過
-
- Microsoft 365
先決條件
- 窗戶
-
- 其中一個版本
- 勝過
-
- 其中一個版本
關於內部版本
這一次,您可以通過程式設計方式查看 Excel 的內部版本,但截至 2023 年 5 月 7 日,Excel 2016 及更高版本的內部版本與 16.0 相比沒有變化。 因此,無法再通過其內部版本識別 Excel 2016、2019、2021 和 Microsoft 265。 但是,由於內部版本沒有改變,優點是只要沒有新版本出來,從2016年開始就可以共同使用Excel庫。
關於操作程式
您可以使用以下代碼找出 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
獲取程式ID的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
不適用於其他平臺。