检查 .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
不适用于其他平台。