众所周知,如果要用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的简易教程相关推荐

  1. Excel VBA + GUI Script 创建SAP采购订单-ME21N

    之前使用VBA写过几个GUI Script,这个是用来使用T-Code ME21N自动创建采购订单,这个脚本的难点在于获取SAP GUI的PO的Item的表格名,多次运行获得的表格名称可能会不一致,因 ...

  2. python cookie使用_Python使用cookielib模块操作cookie的实例教程

    cookielib是一个自动处理cookies的模块,如果我们在使用爬虫等技术的时候需要保存cookie,那么cookielib会让你事半功倍!他最常见的搭档模块就是python下的urllib和re ...

  3. 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

    Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题.很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Vis ...

  4. python获取sap数据_Python驱动SAP GUI完成自动化(选择布局+动态获取节点值)

    讨论过如何利用工具Scripting Tracker录制python操纵SAP GUI的py脚本.软件的录制和生成的代码界面如下: 场景一:实际业务中,除了一些常规步骤,我们可能会驱动SAP GUI中 ...

  5. SAP软件Script脚本重复操作功能了解下(懒人必备)

    声明:本文仅代表原作者观点,文|Elsa.仅用于SAP软件的应用与学习,不代表SAP公司.注:文中SAP相关字或图片,相应著作权归SAP所有. 不知道大家有无遇到过这种场景,某一个事务代码标准功能没有 ...

  6. 启用SAP GUI FOR HTML

    一.说明 SAP系统前端(Front End)一般是用GUI for Windows,还有GUI for JAVA.NetWeaver Business Client等,这些都是以软件形式提供并需要安 ...

  7. 为什么SAP GUI里的传统事务码能通过Fiori Launchpad启动

    今天是农历鼠年大年初六,本文是鼠年第6篇文章,也是汪子熙公众号第205篇原创文章. 大家这几天宅得怎么样了? Jerry之前的文章 那些年我用过的SAP IDE 曾经提到,我们可以把SAP GUI里的 ...

  8. python实现的、带GUI界面电影票房数据可视化程序

    代码地址如下: http://www.demodashi.com/demo/14588.html ##详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从 ...

  9. Python常用的12个GUI框架

    Graphical User Interface,简称 GUI,又称图形化用户接口,所谓的GUI编程,指的是用户不需要输入代码指令,只通过图形界面的交互就可以操作软件功能. 1.Tkinter 一个轻 ...

最新文章

  1. python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法
  2. OpenGL开发学习指南二(glfw+glad)
  3. 用户不见了_03 | 为什么你设计的信息用户总是看不见
  4. 编程语言也环保?C语言领跑,Python、Perl垫底
  5. 毕业设计C语言网吧管理系统,毕业设计网吧管理系统.doc
  6. ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园
  7. 计算机网络df例题,计算机网络期末试题北交.doc
  8. 帝国备份王(Empirebak) \class\functions.php、\class\combakfun.php GETSHELL vul
  9. CentOS7安装火狐flash插件看网页视频
  10. Gensim word2vec计算多个词之间的相似度
  11. jQuery中Ajax+Spring MVC实现跨域请求
  12. 转html图片 xwpf_Word、Pdf、Excel、PPT、html等文件互转工具
  13. oracle 自动化脚本,分享一些非常有用的oracle脚本
  14. K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
  15. 拓端tecdat|R语言析因设计分析:线性模型中的对比
  16. 通过电脑从Ovi商店下载软件并安装
  17. (详细)VMware虚拟机安装Windows7镜像
  18. 如何给光耦输入端限流
  19. 树莓派安装anaconda
  20. 查询瀚高数据库的创建时间

热门文章

  1. python编程制作接金币游戏,闪电侠接金币的FlashMan类
  2. xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?
  3. 拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0
  4. 论文浅尝 | 基于复杂查询图编码的知识库问答
  5. 安装paddlepaddle-GPU 报libcudnn.so和libcublas.so找不到的解决方案
  6. 玩转算法之面试第九章-动态规划
  7. Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller
  8. 基于深度卷积神经网络的目标检测研究综述
  9. 水声被动定位中的机器学习方法研究进展综述
  10. Redis压缩列表原理与应用分析