You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过代码判定Excel版本:区分Office 365与旧版本

如何通过代码区分Office 365和旧版Excel

当然可以通过代码判断当前使用的Excel版本,尤其是精准区分Office 365和旧版(如Excel 2016、2019等永久授权版本)。结合你给出的win32comxlwings代码示例,这里提供两种实用的实现方案:

一、使用win32com.client获取版本信息

Excel的COM对象内置了多个可用于版本识别的属性,其中ProductNameBuild是区分Office 365的核心依据:

import win32com.client

# 初始化Excel应用实例
xl = win32com.client.gencache.EnsureDispatch("Excel.Application")

# 获取核心版本属性
excel_version = xl.Version
excel_build = xl.Build
product_name = xl.ProductName

# 判断是否为Office 365
is_office_365 = "Microsoft 365" in product_name or (int(excel_version) == 16 and int(excel_build) >= 12827)

# 输出结果
print(f"Excel版本号:{excel_version}.{excel_build}")
print(f"产品名称:{product_name}")
print(f"是否为Office 365:{is_office_365}")

# 关闭Excel实例(可选,若不需要保留Excel窗口)
xl.Quit()

关键说明:

  • 产品名称判断:这是最可靠的方式——Office 365的ProductName会直接包含"Microsoft 365"字样,而旧版永久授权的Excel(如2019)显示的是"Microsoft Office"。
  • 版本号+构建号判断:Excel 2016、2019和365的主版本号都是16.0,但Office 365的构建号通常≥12827(2020年之后的稳定版),旧版永久授权的构建号会低于这个数值。

二、使用xlwings简化实现

xlwings本质是对COM对象的轻量封装,可通过app.api直接访问Excel的原生属性,代码更简洁:

import xlwings as xw

# 启动Excel(visible=False表示后台运行,如需显示窗口设为True)
app = xw.App(visible=False)

# 获取版本信息
excel_version = app.api.Version
excel_build = app.api.Build
product_name = app.api.ProductName

is_office_365 = "Microsoft 365" in product_name or (int(excel_version) == 16 and int(excel_build) >= 12827)

# 输出结果
print(f"Excel版本号:{excel_version}.{excel_build}")
print(f"产品名称:{product_name}")
print(f"是否为Office 365:{is_office_365}")

# 关闭Excel
app.quit()

额外提示:

如果你已经通过win32com创建了Excel实例,也可以直接用xlwings连接到现有实例(比如你示例中的wb_xw = xw.books[wb.name]),后续通过wb_xw.app.api就能访问版本属性,无需重复初始化应用。

内容的提问来源于stack exchange,提问作者Peter

火山引擎 最新活动