Python Win32COM 对象介绍:调用 Word、WPS 与办公自动化
在日常工作中,我们经常会用到各种办公软件,但你是否想过这些软件是如何被程序调用的?这里使用Python语言作为示例。
COM 对照标识符
office_apps = {
# Microsoft Office
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
}
在 Windows 平台下使用 Python 的 win32COM 模块调用各类办公软件的方法。内容涵盖 Microsoft Office、金山 WPS 以及 Adobe 系列软件的 COM 接口标识符对照。通过实际代码示例,展示了如何检测已安装的软件、生成 Word 报告、批量转换文档格式以及实现智能应用检测。文章还讲解了 COM 接口原理、错误处理机制及版本兼容技巧,为办公自动化和企业系统集成提供了技术参考。
在日常工作中,我们经常会用到各种办公软件,但你是否想过这些软件是如何被程序调用的?这里使用Python语言作为示例。
office_apps = {
# Microsoft Office
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
}
上面是一个办公软件的'地图',这些是 Windows 平台上办公软件的 COM 接口标识符。
COM(Component Object Model,组件对象模型)是微软在 1990 年代开发的一种二进制接口标准。它允许不同编程语言编写的软件组件进行通信。简单来说,COM 让程序可以通过一个'代号'调用其他软件的功能。
"Word.Application": "Microsoft Word" # 文字处理
"Excel.Application": "Microsoft Excel" # 电子表格
"PowerPoint.Application": "Microsoft PowerPoint" # 演示文稿
"Outlook.Application": "Microsoft Outlook" # 邮件管理
微软 Office 是最经典的办公套件,它的 COM 接口命名最为规范:
软件名.Application通过 COM 接口,你可以用 Python 等自动生成报告、处理数据、制作 PPT,实现办公自动化。
"wps.Application": "WPS Office (新版)" # 统一入口
"Kwps.Application": "WPS 文字" # 文字处理
"Kwpp.Application": "WPS 演示" # 演示文稿
"Ket.Application": "WPS 表格" # 电子表格
WPS 的命名规则很有意思:
WPS 提供了两种调用方式:
wps.Application(新版本)版本演变:从独立的 Kwps、Kwpp、Ket到统一的 wps.Application。
"Photoshop.Application": "Adobe Photoshop" # 图像处理
"AcroExch.App": "Adobe Acrobat" # PDF 处理
Adobe 系列是设计领域的标杆:
AcroExch.App这个特殊的名字import win32com.client
# 自动生成 Word 报告
def create_report():
# 尝试 WPS,失败则用 Word
for app_name in ["wps.Application", "Kwps.Application", "Word.Application"]:
try:
word = win32com.client.Dispatch(app_name)
print(f"使用:{app_name}")
break
except:
continue
doc = word.Documents.Add()
# ... 添加内容、格式、图表 ...
doc.SaveAs("月报.docx")
word.Quit()
def convert_docs_to_pdf(input_folder, output_folder):
"""批量将文档转换为 PDF"""
import os
# 检测可用应用
for app_id in ["wps.Application", "Word.Application"]:
try:
app = win32com.client.Dispatch(app_id)
app.Visible = False
break
except:
continue
for file in os.listdir(input_folder):
if file.endswith(('.doc', '.docx')):
doc_path = os.path.join(input_folder, file)
pdf_path = os.path.join(output_folder, file.replace('.docx', '.pdf'))
doc = app.Documents.Open(doc_path)
doc.ExportAsFixedFormat(pdf_path, 17) # 17 表示 PDF
doc.Close()
app.Quit()
def detect_office_software():
"""检测系统安装的办公软件"""
results = {
"microsoft_office": [],
"wps_office": [],
"adobe": []
}
for prog_id, app_name in office_apps.items():
try:
app = win32com.client.Dispatch(prog_id)
version = getattr(app, "Version", "未知")
if "Word" in app_name or "Excel" in app_name or "PowerPoint" in app_name:
results["microsoft_office"].append(f"{app_name} (v{version})")
elif "WPS" in app_name:
results["wps_office"].append(f"{app_name} (v{version})")
elif "Photoshop" in app_name or "Acrobat" in app_name:
results["adobe"].append(f"{app_name} (v{version})")
app.Quit()
except:
continue
return results
# 创建应用实例
app = win32com.client.Dispatch("Word.Application")
# 调用方法
app.Visible = True # 显示界面
app.Documents.Open("test.docx") # 打开文档
# 访问属性
version = app.Version # 获取版本
def safe_dispatch(app_name):
"""安全创建 COM 对象"""
try:
app = win32com.client.Dispatch(app_name)
return app
except Exception as e:
print(f"无法创建 {app_name}: {e}")
return None
# 优先尝试新版,然后回退
wps_progids = [
"wps.Application", # 新版
"Kwps.Application", # 旧版
"ket.Application", # 表格专用
]
for progid in wps_progids:
try:
wps = win32com.client.Dispatch(progid)
break
except:
continue
def check_feature_support(app):
"""检测应用功能支持"""
features = {
"export_pdf": hasattr(app, "ExportAsFixedFormat"),
"save_as": hasattr(app, "SaveAs2"),
"visible": hasattr(app, "Visible"),
}
return features

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online