python与sap_Python结合SAP GUI Script操作sap的简易教程
众所周知,如果要用Python做一些桌面WIN32应用的自动化工作,就需要用到著名的pywin32尤其是其中的win32com.client模块,pywin32的安装不能直接通过pip install方法,奉上pywin32的官方github链接:https://github.com/mhammond/pywin32/releases。选择与桌面系统版本、python版本对应的版本安装即可:
如果一切正常,在Ipython中导入该模块时不会报异常!如:
In [1]: import win32com.client
接下拉就是建立与sap GUI的连接,如下:
1 SapGuiAuto = win32com.client.GetObject("SAPGUI")2 if not type(SapGuiAuto) ==win32com.client.CDispatch:3 return
4
5 application =SapGuiAuto.GetScriptingEngine6 if not type(application) ==win32com.client.CDispatch:7 SapGuiAuto =None8 return
9
10 connection =application.Children(0)11 if not type(connection) ==win32com.client.CDispatch:12 application =None13 SapGuiAuto =None14 return
15
16 session =connection.Children(0)17 if not type(session) ==win32com.client.CDispatch:18 connection =None19 application =None20 SapGuiAuto =None21 return
代码的剩余部分可以通过sap原生的“脚本回放与录制”功能生成vbs脚本语句,直接插入python代码中即可!
需要强调的是,脚本录制功能并不会记录下所有鼠标键盘操作,过程中如果有些窗口是操作系统本身窗口,依旧需要结合windows句柄的捕获、结合sendmessage、postmessage等win32 API函数来处理。
当然,还需要查阅sap gui script的帮助文件,里面会列出所有的sap底层对象的属性、方法、对应的参数类型、数量等,界面如下:
在我的一项实际工作中,需要获得一个shell表单的某个类似于excel 单元格的值,表格是ALV格式的,但是实际录制中没法录制到单元格值,也许你绞尽脑汁,最后通过其他方法(比如 用sendkey结合 ctrl + Y,CTRL + C)达到了同样的效果,但是笔者依然推荐用sap script 原生的API来解决。通过查阅SAP GUI知道它属于“GuiGridView Object”,具有方法“GetCellValue Method”,方法如下:
Public Function GetCellValue( _
ByVal Row As Long, _
ByVal Column As String _
) As String
其中column参数为字符串string类型,通过录制sap脚本,双击对应可以录制到列名称,通常录制代码类似:
session.findById("wnd[0]/usr/cntlCTRL_CONTAINERBSEG/shellcont/shell").currentCellColumn = "SGTXT"
所以如果想要取得某个单元格(sap中称之为cell)的值,语法如下:
sgtxt = Table.GetCellValue(0, "SGTXT")
需要注明的是,SAP底层的ALV格式表格中行号是从 0开始的,如果想要知道表格共有多少数据行,两行代码即可搞定(表格的ID通过脚本录制即可得到):
Set Table = session.findById("wnd[0]/usr/cntlCTRL_CONTAINERBSEG/shellcont/shell")
tableRowCount= Table.RowCount
如果要获取sap窗口标题来辅助程序判断,语法也很简单,直接调用session对象的text属性即可,如:
window_caption=session.findById("wnd[0]").Text
这些属性方法的操作看似简单,但是如果不查阅相关sap gui script API文档,对API不了解,你自己很难实验出来,也许勉强用别的方法实现,却难免走了弯路或者牺牲了稳定性。毕竟无论是VB、还是Python的编译器,都不会对sap底层的api进行代码提示和自动补充。所以必要时,务必要查阅“帮助文件”。
Scripting Tracker – Development Tool for SAP GUI Scripting,附上博客链接:https://blogs.sap.com/2014/11/20/scripting-tracker-development-tool-for-sap-gui-scripting/
内含scripting Tracker的下载链接:https://tracker.stschnell.de/
该工具比原生的sap script更加可视化更加易用,其中Analyser模块界面如下,依靠它可以清晰捕获到sap界面的树形结构和对应的元素id等属性:
你们关心的脚本录制工具recorder长这样,它支持录制脚本,且支持vb、python、java、powerShell等多种脚本语言的导出:
实在是良心应用,强烈推荐!
有了这些,用Python 控制操作SAP,从此不再是难事!
下面为一个python 操作sap打开T-code ”mm03“的简单示例,供参考:
1 #-Begin-----------------------------------------------------------------
2
3 #-Includes--------------------------------------------------------------
4 importsys, win32com.client5
6 #-Sub Main--------------------------------------------------------------
7 defMain():8
9 try:10
11 SapGuiAuto = win32com.client.GetObject("SAPGUI")12 if not type(SapGuiAuto) ==win32com.client.CDispatch:13 return
14
15 application =SapGuiAuto.GetScriptingEngine16 if not type(application) ==win32com.client.CDispatch:17 SapGuiAuto =None18 return
19
20 connection =application.Children(0)21 if not type(connection) ==win32com.client.CDispatch:22 application =None23 SapGuiAuto =None24 return
25
26 session =connection.Children(0)27 if not type(session) ==win32com.client.CDispatch:28 connection =None29 application =None30 SapGuiAuto =None31 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 =None47 connection =None48 application =None49 SapGuiAuto =None50
51 #-Main------------------------------------------------------------------
52 if __name__ == "__main__":53 Main()54
55 #-End-------------------------------------------------------------------
PS:1、实际的sap脚本录制过程,会录制大量诸如 setfocus,caretposition,resizeWorkingPane等对程序无实际帮助的语句,为了提升程序执行效率,建议对录制的脚本语句进行适当注释和删除;
2、本文部分sap script api语句用的VB,需要适当修改才能运用到python中。
原文:https://www.cnblogs.com/new-june/p/NewJune.html
python与sap_Python结合SAP GUI Script操作sap的简易教程相关推荐
- Excel VBA + GUI Script 创建SAP采购订单-ME21N
之前使用VBA写过几个GUI Script,这个是用来使用T-Code ME21N自动创建采购订单,这个脚本的难点在于获取SAP GUI的PO的Item的表格名,多次运行获得的表格名称可能会不一致,因 ...
- python cookie使用_Python使用cookielib模块操作cookie的实例教程
cookielib是一个自动处理cookies的模块,如果我们在使用爬虫等技术的时候需要保存cookie,那么cookielib会让你事半功倍!他最常见的搭档模块就是python下的urllib和re ...
- 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题.很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Vis ...
- python获取sap数据_Python驱动SAP GUI完成自动化(选择布局+动态获取节点值)
讨论过如何利用工具Scripting Tracker录制python操纵SAP GUI的py脚本.软件的录制和生成的代码界面如下: 场景一:实际业务中,除了一些常规步骤,我们可能会驱动SAP GUI中 ...
- SAP软件Script脚本重复操作功能了解下(懒人必备)
声明:本文仅代表原作者观点,文|Elsa.仅用于SAP软件的应用与学习,不代表SAP公司.注:文中SAP相关字或图片,相应著作权归SAP所有. 不知道大家有无遇到过这种场景,某一个事务代码标准功能没有 ...
- 启用SAP GUI FOR HTML
一.说明 SAP系统前端(Front End)一般是用GUI for Windows,还有GUI for JAVA.NetWeaver Business Client等,这些都是以软件形式提供并需要安 ...
- 为什么SAP GUI里的传统事务码能通过Fiori Launchpad启动
今天是农历鼠年大年初六,本文是鼠年第6篇文章,也是汪子熙公众号第205篇原创文章. 大家这几天宅得怎么样了? Jerry之前的文章 那些年我用过的SAP IDE 曾经提到,我们可以把SAP GUI里的 ...
- python实现的、带GUI界面电影票房数据可视化程序
代码地址如下: http://www.demodashi.com/demo/14588.html ##详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从 ...
- Python常用的12个GUI框架
Graphical User Interface,简称 GUI,又称图形化用户接口,所谓的GUI编程,指的是用户不需要输入代码指令,只通过图形界面的交互就可以操作软件功能. 1.Tkinter 一个轻 ...
最新文章
- python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法
- OpenGL开发学习指南二(glfw+glad)
- 用户不见了_03 | 为什么你设计的信息用户总是看不见
- 编程语言也环保?C语言领跑,Python、Perl垫底
- 毕业设计C语言网吧管理系统,毕业设计网吧管理系统.doc
- ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园
- 计算机网络df例题,计算机网络期末试题北交.doc
- 帝国备份王(Empirebak) \class\functions.php、\class\combakfun.php GETSHELL vul
- CentOS7安装火狐flash插件看网页视频
- Gensim word2vec计算多个词之间的相似度
- jQuery中Ajax+Spring MVC实现跨域请求
- 转html图片 xwpf_Word、Pdf、Excel、PPT、html等文件互转工具
- oracle 自动化脚本,分享一些非常有用的oracle脚本
- K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
- 拓端tecdat|R语言析因设计分析:线性模型中的对比
- 通过电脑从Ovi商店下载软件并安装
- (详细)VMware虚拟机安装Windows7镜像
- 如何给光耦输入端限流
- 树莓派安装anaconda
- 查询瀚高数据库的创建时间
热门文章
- python编程制作接金币游戏,闪电侠接金币的FlashMan类
- xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?
- 拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0
- 论文浅尝 | 基于复杂查询图编码的知识库问答
- 安装paddlepaddle-GPU 报libcudnn.so和libcublas.so找不到的解决方案
- 玩转算法之面试第九章-动态规划
- Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller
- 基于深度卷积神经网络的目标检测研究综述
- 水声被动定位中的机器学习方法研究进展综述
- Redis压缩列表原理与应用分析