我的SAP-GUI安装了Scripting并启用了Scripting.
就像在这个截图中:
在"步骤2:设置SAP系统"中的SAP GUI脚本简介中,您需要调用RZ11.
我没有权限拨打RZ11.
有没有办法通过脚本检测到这个(sapgui/user_scripting打开或关闭)?
目前我使用下面的代码,但连接列表始终为空:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
sapgui = win32com.client.GetObject("SAPGUI")
system = query.get('system')
client = query.get('mandant')
session = False
application = sapgui.GetScriptingEngine
seen = []
for i_conn in range(0, application.Connections.Count):
seen.append('i_conn=%s session_count=%s' % (i_conn, application.Connections.Item(i_conn).Sessions.Count))
for i_sess in range(0, application.Connections.Item(i_conn).Sessions.Count):
session_info = application.Connections.Item(i_conn).Sessions.Item(i_sess).Info
system_of_session = session_info.SystemName
client_of_session = session_info.Client
if system_of_session == system and client_of_session == client:
connection = application.Connections.Item(i_conn).Children(i_sess)
session = connection.Children(i_sess)
break
seen.append('system=%s client=%s' % (system_of_session, client_of_session))
if session:
break
else: …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个执行 SAP GUI 脚本的 Excel 宏。我已经创建了脚本,但我不明白如何在 VBA 宏中使用它。
这是我的 SAP GUI 脚本:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "ZL"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/chkP_DBAGG").selected = true
session.findById("wnd[0]/usr/ctxtP_DTA").text = "DB"
session.findById("wnd[0]/usr/chkP_DBAGG").setFocus
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[25]").press
session.findById("wnd[0]/tbar[1]/btn[26]").press
session.findById("wnd[0]/usr/chkS005").selected = true
session.findById("wnd[0]/usr/chkS017").selected = true
session.findById("wnd[0]/usr/chkS018").selected …Run Code Online (Sandbox Code Playgroud) 我正在处理一个项目,为流程提取一些数据,需要从指定为长文本的 SAP 任务中提取文本。我需要单击一个按钮来打开一个包含长文本作为段落的文档。此数据包含在一个 Microsoft 字样文档中,该文档显示为 SAP 界面的弹出窗口。
在这种情况下无法使用脚本记录器,因为它在 SAP 之外,因此我无法单击字段来记录存在的数据。
当我尝试记录打开文档(按下 SAP 中的长测试按钮)时,它会记录一长串乱码,并且不允许我简单地从单击字段时看到的 .setfocus 更改为 .text以便将语句提取到excel。
我正在处理一个项目,为流程提取一些数据,需要从指定为长文本的 SAP 任务中提取文本。我需要单击一个按钮来打开一个包含长文本作为段落的文档。此数据包含在一个 Microsoft 字样文档中,该文档显示为 SAP 界面的弹出窗口。
在这种情况下无法使用脚本记录器,因为它在 SAP 之外,因此我无法单击字段来记录存在的数据。
当我尝试记录打开文档(按下 SAP 中的长测试按钮)时,它会记录一长串乱码,并且不允许我简单地从单击字段时看到的 .setfocus 更改为 .text以便将语句提取到excel。
这是按下“长文本视图”按钮时录制的一段脚本。粘贴整个东西太大了,但它基本上是重复的。代码以 .press 结束,在这个片段之后大约 30,000 个字符。
有谁知道与提取此类长文本数据相关的代码?
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB10/ssubSUB_GROUP_10:SAPLIQS0:7210/tabsTAB_GROUP_20/tabp20\TAB03/ssubSUB_GROUP_20:SAPLIQS0:7125/tblSAPLIQS0MASSNAH_VIEWER2/btnQMICON-LTMASS[5,0]").setFocus
session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB10/ssubSUB_GROUP_10:SAPLIQS0:7210/tabsTAB_GROUP_20/tabp20\TAB03/ssubSUB_GROUP_20:SAPLIQS0:7125/tblSAPLIQS0MASSNAH_VIEWER2/btnQMICON-LTMASS[5,0]").press
session.findById("wnd[0]/usr/cntlSCMSW_CONTAINER_2102/shellcont/shell").setDocument 1,"e1xydGYxXGFkZWZsYW5nMTAyNVxhbnNpXGFuc2ljcGcxMjUyXHVjMVxhZGVmZjBcZGVmZjBcc3RzaGZkYmNoMFxzdHNoZmxvY2gzN1xzdHNoZmhpY2gzN1xzdHNoZmJpMFxkZWZsYW5nMTAzM1xkZWZsYW5nZmUxMDMzXHRoZW1lbGFuZzEwMzNcdGhlbWVsYW5nZmUwXHRoZW1lbGFuZ2NzMHtcZm9udHRibHtcZjBcZmJpZGkgXGZyb21hblxmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMDIwNjAzMDUwNDA1MDIwMzA0fVRpbWVzIE5ldyBSb21hbjt9e1xmMlxmYmlkaSBcZm1vZGVyblxmY2hhcnNldDBcZnBycTF7XCpccGFub3NlIDAyMDcwMzA5MDIwMjA1MDIwNDA0fUNvdXJpZXIgTmV3O30NCntcZjJcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQwXGZwcnExe1wqXHBhbm9zZSAwMjA3MDMwOTAyMDIwNTAyMDQwNH1Db3VyaWVyIE5ldzt9e1xmMzdcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMGYwNTAyMDIwMjA0MDMwMjA0fUNhbGlicmk7fXtcZmxvbWFqb3JcZjMxNTAwXGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQwXGZwcnEye1wqXHBhbm9zZSAwMjAyMDYwMzA1MDQwNTAyMDMwNH1UaW1lcyBOZXcgUm9tYW47fQ0Ke1xmZGJtYWpvclxmMzE1MDFcZmJpZGkgXGZyb21hblxmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMDIwNjAzMDUwNDA1MDIwMzA0fVRpbWVzIE5ldyBSb21hbjt9e1xmaGltYWpvclxmMzE1MDJcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMGYwMzAyMDIwMjA0MDMwMjA0fUNhbGlicmkgTGlnaHQ7fQ0Ke1xmYmltYWpvclxmMzE1MDNcZmJpZGkgXGZyb21hblxmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMDIwNjAzMDUwNDA1MDIwMzA0fVRpbWVzIE5ldyBSb21hbjt9e1xmbG9taW5vclxmMzE1MDRcZmJpZGkgXGZyb21hblxmY2hhcnNldDBcZnBycTJ7XCpccGFub3NlIDAyMDIwNjAzMDUwNDA1MDIwMzA0fVRpbWVzIE5ldyBSb21hbjt9DQp7XGZkYm1pbm9yXGYzMTUwNVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MFxmcHJxMntcKlxwYW5vc2UgMDIwMjA2MDMwNTA0MDUwMjAzMDR9VGltZXMgTmV3IFJvbWFuO317XGZoaW1pbm9yXGYzMTUwNlxmYmlkaSBcZnN3aXNzXGZjaGFyc2V0MFxmcHJxMntcKlxwYW5vc2UgMDIwZjA1MDIwMjAyMDQwMzAyMDR9Q2FsaWJyaTt9DQp7XGZiaW1pbm9yXGYzMTUwN1xmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MFxmcHJxMntcKlxwYW5vc2UgMDIwMjA2MDMwNTA0MDUwMjAzMDR9VGltZXMgTmV3IFJvbWFuO317XGY0OVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MjM4XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBDRTt9e1xmNTBcZmJpZGkgXGZyb21hblxmY2hhcnNldDIwNFxmcHJxMiBUaW1lcyBOZXcgUm9tYW4gQ3lyO30NCntcZjUyXGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNjFcZnBycTIgVGltZXMgTmV3IFJvbWFuIEdyZWVrO317XGY1M1xmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MTYyXGZwcnEyIFRpbWVzIE5ldyBSb21hbiBUdXI7fXtcZjU0XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNzdcZnBycTIgVGltZXMgTmV3IFJvbWFuIChIZWJyZXcpO317XGY1NVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MTc4XGZwcnEyIFRpbWVzIE5ldyBSb21hbiAoQXJhYmljKTt9DQp7XGY1NlxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MTg2XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBCYWx0aWM7fXtcZjU3XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNjNcZnBycTIgVGltZXMgTmV3IFJvbWFuIChWaWV0bmFtZXNlKTt9e1xmNjlcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQyMzhcZnBycTEgQ291cmllciBOZXcgQ0U7fXtcZjcwXGZiaWRpIFxmbW9kZXJuXGZjaGFyc2V0MjA0XGZwcnExIENvdXJpZXIgTmV3IEN5cjt9DQp7XGY3MlxmYmlkaSBcZm1vZGVyblxmY2hhcnNldDE2MVxmcHJxMSBDb3VyaWVyIE5ldyBHcmVlazt9e1xmNzNcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxNjJcZnBycTEgQ291cmllciBOZXcgVHVyO317XGY3NFxmYmlkaSBcZm1vZGVyblxmY2hhcnNldDE3N1xmcHJxMSBDb3VyaWVyIE5ldyAoSGVicmV3KTt9e1xmNzVcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxNzhcZnBycTEgQ291cmllciBOZXcgKEFyYWJpYyk7fQ0Ke1xmNzZcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxODZcZnBycTEgQ291cmllciBOZXcgQmFsdGljO317XGY3N1xmYmlkaSBcZm1vZGVyblxmY2hhcnNldDE2M1xmcHJxMSBDb3VyaWVyIE5ldyAoVmlldG5hbWVzZSk7fXtcZjY5XGZiaWRpIFxmbW9kZXJuXGZjaGFyc2V0MjM4XGZwcnExIENvdXJpZXIgTmV3IENFO317XGY3MFxmYmlkaSBcZm1vZGVyblxmY2hhcnNldDIwNFxmcHJxMSBDb3VyaWVyIE5ldyBDeXI7fQ0Ke1xmNzJcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxNjFcZnBycTEgQ291cmllciBOZXcgR3JlZWs7fXtcZjczXGZiaWRpIFxmbW9kZXJuXGZjaGFyc2V0MTYyXGZwcnExIENvdXJpZXIgTmV3IFR1cjt9e1xmNzRcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxNzdcZnBycTEgQ291cmllciBOZXcgKEhlYnJldyk7fXtcZjc1XGZiaWRpIFxmbW9kZXJuXGZjaGFyc2V0MTc4XGZwcnExIENvdXJpZXIgTmV3IChBcmFiaWMpO30NCntcZjc2XGZiaWRpIFxmbW9kZXJuXGZjaGFyc2V0MTg2XGZwcnExIENvdXJpZXIgTmV3IEJhbHRpYzt9e1xmNzdcZmJpZGkgXGZtb2Rlcm5cZmNoYXJzZXQxNjNcZnBycTEgQ291cmllciBOZXcgKFZpZXRuYW1lc2UpO317XGY0MTlcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDIzOFxmcHJxMiBDYWxpYnJpIENFO317XGY0MjBcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDIwNFxmcHJxMiBDYWxpYnJpIEN5cjt9DQp7XGY0MjJcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDE2MVxmcHJxMiBDYWxpYnJpIEdyZWVrO317XGY0MjNcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDE2MlxmcHJxMiBDYWxpYnJpIFR1cjt9e1xmNDI2XGZiaWRpIFxmc3dpc3NcZmNoYXJzZXQxODZcZnBycTIgQ2FsaWJyaSBCYWx0aWM7fXtcZjQyN1xmYmlkaSBcZnN3aXNzXGZjaGFyc2V0MTYzXGZwcnEyIENhbGlicmkgKFZpZXRuYW1lc2UpO30NCntcZmxvbWFqb3JcZjMxNTA4XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQyMzhcZnBycTIgVGltZXMgTmV3IFJvbWFuIENFO317XGZsb21ham9yXGYzMTUwOVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MjA0XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBDeXI7fXtcZmxvbWFqb3JcZjMxNTExXGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNjFcZnBycTIgVGltZXMgTmV3IFJvbWFuIEdyZWVrO30NCntcZmxvbWFqb3JcZjMxNTEyXGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNjJcZnBycTIgVGltZXMgTmV3IFJvbWFuIFR1cjt9e1xmbG9tYWpvclxmMzE1MTNcZmJpZGkgXGZyb21hblxmY2hhcnNldDE3N1xmcHJxMiBUaW1lcyBOZXcgUm9tYW4gKEhlYnJldyk7fXtcZmxvbWFqb3JcZjMxNTE0XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNzhcZnBycTIgVGltZXMgTmV3IFJvbWFuIChBcmFiaWMpO30NCntcZmxvbWFqb3JcZjMxNTE1XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxODZcZnBycTIgVGltZXMgTmV3IFJvbWFuIEJhbHRpYzt9e1xmbG9tYWpvclxmMzE1MTZcZmJpZGkgXGZyb21hblxmY2hhcnNldDE2M1xmcHJxMiBUaW1lcyBOZXcgUm9tYW4gKFZpZXRuYW1lc2UpO317XGZkYm1ham9yXGYzMTUxOFxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MjM4XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBDRTt9DQp7XGZkYm1ham9yXGYzMTUxOVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MjA0XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBDeXI7fXtcZmRibWFqb3JcZjMxNTIxXGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNjFcZnBycTIgVGltZXMgTmV3IFJvbWFuIEdyZWVrO317XGZkYm1ham9yXGYzMTUyMlxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MTYyXGZwcnEyIFRpbWVzIE5ldyBSb21hbiBUdXI7fQ0Ke1xmZGJtYWpvclxmMzE1MjNcZmJpZGkgXGZyb21hblxmY2hhcnNldDE3N1xmcHJxMiBUaW1lcyBOZXcgUm9tYW4gKEhlYnJldyk7fXtcZmRibWFqb3JcZjMxNTI0XGZiaWRpIFxmcm9tYW5cZmNoYXJzZXQxNzhcZnBycTIgVGltZXMgTmV3IFJvbWFuIChBcmFiaWMpO317XGZkYm1ham9yXGYzMTUyNVxmYmlkaSBcZnJvbWFuXGZjaGFyc2V0MTg2XGZwcnEyIFRpbWVzIE5ldyBSb21hbiBCYWx0aWM7fQ0Ke1xmZGJtYWpvclxmMzE1MjZcZmJpZGkgXGZyb21hblxmY2hhcnNldDE2M1xmcHJxMiBUaW1lcyBOZXcgUm9tYW4gKFZpZXRuYW1lc2UpO317XGZoaW1ham9yXGYzMTUyOFxmYmlkaSBcZnN3aXNzXGZjaGFyc2V0MjM4XGZwcnEyIENhbGlicmkgTGlnaHQgQ0U7fXtcZmhpbWFqb3JcZjMxNTI5XGZiaWRpIFxmc3dpc3NcZmNoYXJzZXQyMDRcZnBycTIgQ2FsaWJyaSBMaWdodCBDeXI7fQ0Ke1xmaGltYWpvclxmMzE1MzFcZmJpZGkgXGZzd2lzc1xmY2hhcnNldDE2MVxmcHJxMiBDYWxpYnJpIExpZ2h0IEdyZWVrO317XGZoaW1ham9yXGYzMTUzMlxmYmlkaSBcZnN3aXNzXGZjaGFyc2V0MTYyXGZwcnEyIENhbGlicmkgTGlnaHQgVHVyO317XGZoaW1ham9yXGYzMTUzNVxmYmlkaSBcZnN3aXNzXGZjaGFyc2V0MTg2XGZwcnEyIENhbGli
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 C# 连接到 SAP GUI。作为参考,我使用此处找到的代码:How do I Automation SAP GUI with c#
我添加了对 sapfewse.ocx 的引用和相应的 using 语句。这是我的代码:
using SAPFEWSELib;
private void OpenSAP()
{
GuiApplication Application;
GuiConnection Connection;
GuiSession Session;
Application = (GuiApplication)System.Activator.CreateInstance(Type.GetTypeFromProgID("SapGui.ScriptingCtrl.1"));
// How do I find the connection string that I use to connect to SAP?
Connection = Application.OpenConnectionByConnectionString("XXXXXXXXX", false, true);
Session = (GuiSession)Connection.Sessions.Item(0);
Session.TestToolMode = 1;
((GuiTextField)Session.ActiveWindow.FindByName("RSYST-MANDT", "GuiTextField")).Text = "XXX";
((GuiTextField)Session.ActiveWindow.FindByName("RSYST-BNAME", "GuiTextField")).Text = "XXXXXXXX";
((GuiTextField)Session.ActiveWindow.FindByName("RSYST-BCODE", "GuiPasswordField")).Text = "XXXXXXXX";
((GuiTextField)Session.ActiveWindow.FindByName("RSYST-LANGU", "GuiTextField")).Text = "XX";
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时出现错误
...连接中断
如何确定要使用的连接字符串正确?在哪里可以找到用于连接 SAP …
I have a macro to download certain SAP GUI reports to Excel. My issue is that if I run the macro more than once in the same SAP GUI session (first time it works fine), I get this error which I am not able to bypass:
Run-time error 619
For some reason (I think it's related to which server the user is logged on to), the SAP ERP module (RE-FX) have two different variants/GUIs. Therefore, I have two different setups …
我正在尝试使用 VBA 将 SAP GUI 中的一行中的特定单元格中的数据获取到 Excel 表中。当我录制一个单击我需要的 5-6 个项目的宏时,它只显示我单击了一个。此外,我看不到任何从单元格获取数据到 SAP GUI 的方法。SAP GUI 代码在这里:
Dim W_Ret As Boolean
W_Ret = Attach_Session
If Not W_Ret Then
Exit Sub
End If
startrow = 10
On Error GoTo myerr
objSess.findById("wnd[0]").maximize
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "/nymm_pricelist"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/usr/ctxtS_MATNR-LOW").Text = Cells(currentline, 1).Value
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").Text = Cells(currentline, 4).Value
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").SetFocus
objSess.findById("wnd[0]/usr/ctxtS_VKORG-LOW").caretPosition = 4
objSess.findById("wnd[0]").sendVKey 8
Set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell")
Cells(currentline, 5).Value = myGrid.GetCellValue(0, "MAKTX")
Cells(currentline, 6).Value = myGrid.GetCellValue(0, "GLOBALSALES_KBETR")
Cells(currentline, 7).Value = myGrid.GetCellValue(0, "GLOBALSALES_KONWA")
Cells(currentline, 8).Value = myGrid.GetCellValue(0, …Run Code Online (Sandbox Code Playgroud) 有没有办法查看 SAP GUI 对象的属性?
像这样:

但对于如下 SAP 对象:
Set SAPGuiAuto = GetObject("SAPGUI")
Set App = SAPGuiAuto.GetScriptingEngine
Set Connection = App.Children(0)
Set SAPSession = Connection.Children(0)
Run Code Online (Sandbox Code Playgroud)
我在阅读这篇文章的答案的最后一部分后问这个问题:VBA General way for Pull data out of SAP
sapfewse.ocx但是,如果您想要使用早期绑定,以便 VBA 编辑器可以显示您正在使用的对象的属性和方法,则需要在 SAP GUI 安装文件夹中添加对的引用。