SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

本案例和SAP GUI Scripting案例3:借助Word的邮件合并功能创建100个用户的步骤不同,案例3是利用桌面上的工作生成代码后再执行,现在要通过脚本来读取桌面上的文件并执行了,更高级了是不是?是的!

为了缩短演示的时间,我们就只创建10个用户了。

先准备好数据:

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

调整代码(记得复制一份代码,以免把之前的成果毁了),使其能自动操作Excel。

可参考文档:

https://blogs.sap.com/2014/08/04/script-recording-playback-for-dummies/

其实就是在原先的代码前面加入一段代码读取Excel中的一行数据中的每一个字段并赋值到某个变量,然后用变量替换代码块中的值。在代码块的结尾清空变量,继续下一次循环。反复的读取Excel、赋值变量、执行代码段,直到Excel中的数据行全部读取完毕。

太详细的代码需要理解,都是这个套路就是了,代码中一撇(一半单引号)是注释,注释这一行的内容不会执行(字母REM开头的行也是注释)。

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

‘—–1.读取Excel并赋值到变量

我们Excel有7列,所以定义7个字段(字段名随意,但为了方便管理,我用COL1~COL7这样按顺序编)取值.

REM ADDED BY EXCEL *************************************

Dim objExcel

Dim objSheet, intRow, i

Set objExcel = GetObject(,”Excel.Application”)

Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

For i = 2 to objSheet.UsedRange.Rows.Count ‘从第二行开始读数据,如果数据不在第二行修改参数就好

COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) ‘用户ID,第一列

COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) ‘用户昵称

COL3 = Trim(CStr(objSheet.Cells(i, 3).Value)) ‘初始密码

COL4 = Trim(CStr(objSheet.Cells(i, 4).Value)) ‘打印机

COL5 = Trim(CStr(objSheet.Cells(i, 5).Value)) ‘立刻打印标识

COL6 = Trim(CStr(objSheet.Cells(i, 6).Value)) ‘输出后删除假脱机标识

COL7 = Trim(CStr(objSheet.Cells(i, 7).Value)) ‘权限参数文件

REM ADDED BY EXCEL *************************************

‘—–2.用变量替换代码块中的字段值并执行代码段.

注意了,这里由于是直接用变量替换的,因此需要连变量外面的双引号也一起替换掉,这与邮件合并稍微有点不同,邮件合并是只合并双引号里的内容。

session.findById(“wnd[0]/tbar[0]/okcd”).text = “su01”

session.findById(“wnd[0]”).sendVKey 0

session.findById(“wnd[0]/usr/ctxtSUID_ST_BNAME-BNAME”).text = COL1

session.findById(“wnd[0]/usr/ctxtSUID_ST_BNAME-BNAME”).caretPosition = 7

session.findById(“wnd[0]/tbar[1]/btn[8]”).press

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpADDR/ssubMAINAREA:SAPLSUID_MAINTENANCE:1900/txtSUID_ST_NODE_PERSON_NAME-NAME_LAST”).text = COL1

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpADDR/ssubMAINAREA:SAPLSUID_MAINTENANCE:1900/txtSUID_ST_NODE_PERSON_NAME-NAME_LAST”).setFocus

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpADDR/ssubMAINAREA:SAPLSUID_MAINTENANCE:1900/txtSUID_ST_NODE_PERSON_NAME-NAME_LAST”).caretPosition = 0

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO”).select

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO/ssubMAINAREA:SAPLSUID_MAINTENANCE:1101/ctxtSUID_ST_NODE_LOGONDATA-USERALIAS”).text = COL2

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO/ssubMAINAREA:SAPLSUID_MAINTENANCE:1101/pwdSUID_ST_NODE_PASSWORD_EXT-PASSWORD”).text = COL3

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO/ssubMAINAREA:SAPLSUID_MAINTENANCE:1101/pwdSUID_ST_NODE_PASSWORD_EXT-PASSWORD2”).text = COL3

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO/ssubMAINAREA:SAPLSUID_MAINTENANCE:1101/pwdSUID_ST_NODE_PASSWORD_EXT-PASSWORD2”).setFocus

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpLOGO/ssubMAINAREA:SAPLSUID_MAINTENANCE:1101/pwdSUID_ST_NODE_PASSWORD_EXT-PASSWORD2”).caretPosition = 10

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpDEFA”).select

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/chkSUID_ST_NODE_DEFAULTS-SPDB”).selected = COL5

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/chkSUID_ST_NODE_DEFAULTS-SPDA”).selected = COL6

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/ctxtSUID_ST_NODE_DEFAULTS-SPLD”).text = COL4

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/chkSUID_ST_NODE_DEFAULTS-SPDA”).setFocus

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpPROF”).select

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpPROF/ssubMAINAREA:SAPLSUID_MAINTENANCE:1103/cntlG_PROFILES_CONTAINER/shellcont/shell”).modifyCell 0,”PROFILE”,COL7

session.findById(“wnd[0]/usr/tabsTABSTRIP1/tabpPROF/ssubMAINAREA:SAPLSUID_MAINTENANCE:1103/cntlG_PROFILES_CONTAINER/shellcont/shell”).pressEnter

session.findById(“wnd[0]/tbar[0]/btn[11]”).press

‘——3.清空变量,继续下一次循环

REM FINALIZATION CONTROL CHECK ************************

aux=col1 & ” ” & col2 & ” ” & col3 & ” ” & col4 & ” ” & col5 & ” ” & col6 & ” ” & col7

CreateObject(“WScript.Shell”).run(“cmd /c @echo %date% %time% ” & aux & ” >> C:\SCRIPT\PlOrCreationLog.txt”)

next

msgbox “Process Completed”

REM FINALIZATION CONTROL CHECK ************************

贴一下完整的代码:

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

然后,先登录要操作的SAP客户端(退出其他客户端先),打开Excel数据文件,然后运行脚本。

注意,脚本会从第二行开始读取数据,Excel文件只能打开一个!

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

滴溜溜一下,10个用户就创建完了。这种方式比用邮件合并稍微高级一些,代码量小。

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

如果运行脚本报错,多半是标点符号的问题,一定要用英文状态下的标点符号,注释一定要用英文单引号。

如果不慎弄错了,运行脚本的时候会提示第几行有问题,认真检查就好了。

比如,我们故意搞点事情,把24行的注释符号改成ESC下面那个控制符。

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

此时运行脚本就报错了:24行27列有错,编译发生错误。

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

补充一嘴,如果需要记录日志,那么你需要根据需要创建好脚本中写的日志文件,比如我在C盘的script文件夹下创建好PlOrCreationLog.txt文件用于存储日志。这样脚本运行时就会将日志写到此文件中,否则不会有日志。

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

日志:

SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户

重要的事情再说一遍:

  1. SAP客户端只登录一个集团,且要打开在初始界面
  2. 要读取的Excel文件要事先打开,且只打开一个Excel文件
  3. 在最终保存数据前别敲回车键
  4. 如果要跳转其他事务代码,请加/n,如果只有一个事务代码则别用/n(否则每次都要重新打开一次程序,慢啊)
  5. 标点符号
  6. 事先创建好日志文件
  7. 用正规的Office软件

附本案例VBS脚本和Excel文件:SAP Gui Scripting案例4

点击标签SAP GUI Scripting可查看更多本系列文章。

如若转载,请注明出处:https://www.gavindong.com/4113.html

微信沟通