NET에 설치된 Excel의 내부 버전 확인
운영 환경
- 비주얼 스튜디오
-
- 비주얼 스튜디오 2022
- .그물
-
- .NET 6.0
- 윈도우
-
- 윈도우 11
- 뛰어나다
-
- 마이크로소프트 365
필수 구성 요소
- 윈도우
-
- 버전 중 하나
- 뛰어나다
-
- 버전 중 하나
내부 버전 정보
이번에는 엑셀의 내부 버전을 프로그래밍 방식으로 확인할 수 있습니다만, 2023/05/07 현재 엑셀 2016 이상의 내부 버전은 16.0에서 변경되지 않았습니다. 따라서 더 이상 내부 버전으로 Excel 2016, 2019, 2021 및 Microsoft 265를 식별할 수 없습니다. 다만, 내부 버전은 바뀌지 않았기 때문에, 새로운 버전이 나오지 않는 한, 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);
}
}
}
프로그램에 대한 간단한 설명은이 방법을 사용하여 프로그램 ID 유형을Type.GetTypeFromProgID
가져 오는 것입니다 Excel.Application
.
Activator.CreateInstance
이 메서드는 Excel.Application
의 인스턴스를 만듭니다.
Excel.Application
의 직접 인스턴스를 생성하지 않는 이유는 Excel 라이브러리의 버전을 직접 참조하여 사용하는 것을 방지하기 위해서입니다.
이렇게 하면 최신 버전을 볼 수 있습니다.
그런 다음 생성된 application
인스턴스에서 속성을 참조 Version
하고 버전을 가져올 수 있습니다.
검색되는 버전은 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
다른 플랫폼에서는 작동하지 않습니다.