如何通过代码判定Excel版本:区分Office 365与旧版本
如何通过代码区分Office 365和旧版Excel
当然可以通过代码判断当前使用的Excel版本,尤其是精准区分Office 365和旧版(如Excel 2016、2019等永久授权版本)。结合你给出的win32com和xlwings代码示例,这里提供两种实用的实现方案:
一、使用win32com.client获取版本信息
Excel的COM对象内置了多个可用于版本识别的属性,其中ProductName和Build是区分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




