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

如何在64位Python中无管理员权限调用32位SAP GUI Scripting API?

64位Python调用SAP GUI Scripting API(无管理员权限解决方案)

你遇到的「Class not registered」错误本质是64位Python进程无法直接加载32位SAP COM组件,但你提到的Excel VBA能无障碍实现的思路完全正确——核心是利用COM Surrogate(由dllhost.exe提供的跨位通信中间层),直接连接已运行的SAP GUI实例,而非尝试加载32位DLL。

关键思路:用GetObject替代Dispatch

你的VBA代码没有用CreateObject而是GetObject,这是破局点:SAP GUI作为正在运行的32位进程,它的COM对象已经注册在系统的**Running Object Table (ROT)**中。我们不需要去注册或加载32位组件,只需要从ROT中直接获取已存在的对象即可,这个过程Windows会自动用COM Surrogate处理跨位通信,完全不需要管理员权限。

64位Python实现代码

直接复刻VBA的逻辑,用win32com.clientGetObject方法即可:

import win32com.client

def interact_with_sap():
    # 连接到已运行的SAP GUI实例
    sap_gui_auto = win32com.client.GetObject("SAPGUI")
    # 获取SAP脚本引擎
    sap_app = sap_gui_auto.GetScriptingEngine()
    # 获取第一个已连接的系统实例
    sap_connection = sap_app.Children(0)
    # 获取第一个会话窗口
    sap_session = sap_connection.Children(0)
    # 执行事务示例
    sap_session.StartTransaction("IH01")

if __name__ == "__main__":
    interact_with_sap()

注意事项

  • 确保SAP GUI已经启动并至少有一个已连接的会话,否则GetObject会抛出「Object not found」错误。
  • 确认SAP GUI的脚本功能已启用:在SAP GUI中依次点击选项辅助功能与脚本脚本,勾选「启用脚本」。

内容的提问来源于stack exchange,提问作者Ronan Paixão

火山引擎 最新活动