首页 > 解决方案 > 如何以编程方式区分 Excel 2019 和 2016?

问题描述

我维护了一个诊断程序,它以编程方式确定 MS Office 应用程序的版本,包括 Excel 和 Word。它适用于 MS Office 版本 2003、2007、2010、2013 和 2016。但现在我发现它错误地将 MS Office 2019 应用程序报告为 MS Office 2016。

八年前,MA Hanin 发布了一个类似的问题:

以编程方式识别 Excel 版本

mathieu 的回复(接受的答案)与用于在注册表中识别 MS Office 与产品版本的相关数字。例如,数字 14.0 对应于 Office 2010。Doug Glancy 直接使用打印 Excel 应用程序对象的 version 属性的 VB 代码解决了这个问题:

https://docs.microsoft.com/en-us/office/vba/api/excel.application.version

这是一个 VB 脚本,用于诊断系统安装了哪个版本的 Excel(如果有):

On Error Resume Next
Set excelApp = CreateObject("Excel.Application") 
If Err.Number <> 0 Then
    WScript.Echo "Excel is not installed"
Else
    Wscript.Echo "Excel Version: " & excelApp.Version 
End If

该诊断忠实地报告了与 2011 年的帖子一致的 MS Office 版本。从那时起,它报告了 Office 2013 的 15.0 和 Office 2016 的 16.0。不过,最近,我惊讶地发现它还报告了 Office 2019 的 16.0。那是就是不对!2016 年和 2019 年的功能集明显不同,因此不应将它们混为一谈:

https://support.office.com/en-us/article/what-s-new-in-office-2019-5077cbbe-0d94-44cc-b30e-654e37629b0c?ui=en-US&rs=en-US&ad=US

是否有以编程方式区分 Office 2016 和 Office 2019 的替代方法?

标签: excelms-wordms-office

解决方案


是的,v16 可以是 2016 或 2019

这适用于我的版本。

:GetOfficeVer
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
    >%vbs% @echo off
    >>%vbs% echo Option Explicit ' Enforce variable declaration
    >>%vbs% echo Dim oShell
    >>%vbs% echo Dim lOfficeVersion
    >>%vbs% echo Set oShell = CreateObject("WScript.Shell")
    >>%vbs% echo On Error Resume Next
    >>%vbs% echo lOfficeVersion = GetOfficeVersionNumber() 
    >>%vbs% echo MsgBox "OfficeVersion = " ^& lOfficeVersion
    >>%vbs% echo     Function GetOfficeVersionNumber()
    >>%vbs% echo         GetOfficeVersionNumber = "" 
    >>%vbs% echo         Dim sTempValue
    >>%vbs% echo         sTempValue = oShell.RegRead("HKCR\Excel.Application\CurVer\")
    >>%vbs% echo         If Len(sTempValue) ^> 2 Then GetOfficeVersionNumber = Replace(Right(sTempValue, 2), ^".^", ^"^")
    >>%vbs% echo     End Function   
cscript //nologo %vbs%
pause
if exist %vbs% del /f /q %vbs%
endlocal
goto :EOF

推荐阅读