As we all know, if you want to use Python to do some desktop WIN32 application automation work, you need to use the famous Pywin32 especially the Win32com.client module, PYWIN32 installation can not be directly through the Pip install method, On Pywin32 's official GitHub link: https://github.com/mhammond/pywin32/releases. Select the version that corresponds to the desktop system version and Python version to install:
If everything is OK, the module will not be reported in Ipython when it is imported! Such as:
In [1]: Import win32com.client
The next pull is to establish a connection to the SAP GUI, as follows:
1 SapGuiAuto = win32com.client.GetObject("SAPGUI")
2 if not type(SapGuiAuto) == win32com.client.CDispatch:
3 return
4
5 application = SapGuiAuto.GetScriptingEngine
6 if not type(application) == win32com.client.CDispatch:
7 SapGuiAuto = None
8 return
9
10 connection = application.Children(0)
11 if not type(connection) == win32com.client.CDispatch:
12 application = None
13 SapGuiAuto = None
14 return
15
16 session = connection.Children(0)
17 if not type(session) == win32com.client.CDispatch:
18 connection = None
19 application = None
20 SapGuiAuto = None
21 return
The remainder of the code can be generated with the VBS script statement from the SAP native script playback and recording feature, directly into the Python code!
It should be emphasized that the script recording function does not record all mouse keyboard actions, if some windows are the operating system itself window, still need to combine the capture of Windows handle, combined with SendMessage, PostMessage and other Win32 API functions to handle.
Of course, you also need to consult the SAP GUI script Help file, which will list all the sap underlying object properties, methods, corresponding parameter type, quantity, etc., the interface is as follows:
In one of my actual work, I need to get a shell form that resembles Excel cell value, the table is ALV format, but the actual recording can not record to the cell value, perhaps you racked your brains, and finally through other methods (such as with Sendkey Ctrl + Y,ctrl +) C) has achieved the same effect, but I still recommend using SAP script native API to solve. By looking at the SAP GUI, you know that it belongs to "Guigridview Object" and has the method ' Getcellvalue method ' as follows:
Public Function GetCellValue( _
ByVal Row As Long, _
ByVal Column As String _
) As String
Where the column parameter is string type, by recording the SAP script, double-clicking the corresponding can record to the column name, usually recording code similar to:
Session.findbyid ("wnd[0]/usr/cntlctrl_containerbseg/shellcont/shell"" Sgtxt"
So if you want to get a value for a cell (called a cell in SAP), the syntax is as follows:
" Sgtxt ")
It should be noted that the ALV format of SAP bottom line number is starting from 0, if you want to know how many rows of data in the table, two lines of code can be done (the ID of the table is recorded by the script can be obtained):
Set Table = session.findById("wnd[0]/usr/cntlCTRL_CONTAINERBSEG/shellcont/shell")
tableRowCount = Table.RowCount
If you want to get the SAP window title to assist the program to judge, the syntax is very simple, directly invoke the Session object's Text property, such as:
Window_caption=session.findbyid ("wnd[0]"). Text
The operation of these property methods seems simple, but if you do not consult the relevant SAP GUI script API documentation, do not understand the API, you are difficult to experiment with yourself, perhaps reluctantly implemented in other ways, but inevitably go a detour or sacrifice stability. After all, neither the VB nor the Python compiler will code hints and automatically supplement the SAP underlying API. So when necessary, be sure to check out the Help file.
A prominent blogger at the SAP blog site is recommended here: Stefan Schnell ( He wrote a lot of SAP scripts in conjunction with other languages ) and the free SAP scripting tools he developed:
Scripting tracker–development Tool for SAP GUI Scripting, with a blog link:https://blogs.sap.com/2014/11/20/scripting-tracker-development-tool-for-sap-gui-scripting/
Download link containing scripting Tracker:https://tracker.stschnell.de/
The tool is more visual and easy to use than native SAP script, where the Analyser module interface is based on the ability to clearly capture the tree structure of the SAP interface and the corresponding element ID attributes:
You care about the script Recorder recorder long this way, it supports recording scripts and supports the export of various scripting languages such as VB, Python, Java, PowerShell, and more:
Really is a conscience application, highly recommended!
With these, it is no longer difficult to operate SAP with Python control!
Here is a simple example of a Python operation that opens T-code "mm03" for reference:
1 #-Begin-----------------------------------------------------------------
2
3 #-Includes--------------------------------------------------------------
4 import sys, win32com.client
5
6 #-Sub Main--------------------------------------------------------------
7 def Main():
8
9 try:
10
11 SapGuiAuto = win32com.client.GetObject("SAPGUI")
12 if not type(SapGuiAuto) == win32com.client.CDispatch:
13 return
14
15 application = SapGuiAuto.GetScriptingEngine
16 if not type(application) == win32com.client.CDispatch:
17 SapGuiAuto = None
18 return
19
20 connection = application.Children(0)
21 if not type(connection) == win32com.client.CDispatch:
22 application = None
23 SapGuiAuto = None
24 return
25
26 session = connection.Children(0)
27 if not type(session) == win32com.client.CDispatch:
28 connection = None
29 application = None
30 SapGuiAuto = None
31 return
32
33
34 #session.findById("wnd[0]").resizeWorkingPane(65, 19, 0)
35 session.findById("wnd[0]/tbar[0]/okcd").text = "mm03"
36 session.findById("wnd[0]").sendVKey(0)
37 session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text="9000000000012"
38 session.findById("wnd[0]").sendVKey(0)
39 session.findById("wnd[1]/tbar[0]/btn[0]").press()
40 session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP02").select()
41
42 except:
43 print(sys.exc_info()[0])
44
45 finally:
46 session = None
47 connection = None
48 application = None
49 SapGuiAuto = None
50
51 #-Main------------------------------------------------------------------
52 if __name__ == "__main__":
53 Main()
54
55 #-End-------------------------------------------------------------------
Ps:1, the actual SAP script recording process, will record a large number of programs such as Setfocus,caretposition,resizeworkingpane, such as no practical help to the program, in order to improve the efficiency of program execution, it is recommended that the recorded script statements are properly annotated and deleted;
2, this part of the SAP Script API statement with VB, needs to be modified to apply to Python.
Python easy tutorial for SAP with SAP GUI script