SAP Gui Scripting案例4:让脚本自己读Excel创建100个用户
本案例和SAP GUI Scripting案例3:借助Word的邮件合并功能创建100个用户的步骤不同,案例3是利用桌面上的工作生成代码后再执行,现在要通过脚本来读取桌面上的文件并执行了,更高级了是不是?是的!
为了缩短演示的时间,我们就只创建10个用户了。
先准备好数据:
调整代码(记得复制一份代码,以免把之前的成果毁了),使其能自动操作Excel。
可参考文档:
https://blogs.sap.com/2014/08/04/script-recording-playback-for-dummies/
其实就是在原先的代码前面加入一段代码读取Excel中的一行数据中的每一个字段并赋值到某个变量,然后用变量替换代码块中的值。在代码块的结尾清空变量,继续下一次循环。反复的读取Excel、赋值变量、执行代码段,直到Excel中的数据行全部读取完毕。
太详细的代码需要理解,都是这个套路就是了,代码中一撇(一半单引号)是注释,注释这一行的内容不会执行(字母REM开头的行也是注释)。
‘—–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客户端(退出其他客户端先),打开Excel数据文件,然后运行脚本。
注意,脚本会从第二行开始读取数据,Excel文件只能打开一个!
滴溜溜一下,10个用户就创建完了。这种方式比用邮件合并稍微高级一些,代码量小。
如果运行脚本报错,多半是标点符号的问题,一定要用英文状态下的标点符号,注释一定要用英文单引号。
如果不慎弄错了,运行脚本的时候会提示第几行有问题,认真检查就好了。
比如,我们故意搞点事情,把24行的注释符号改成ESC下面那个控制符。
此时运行脚本就报错了:24行27列有错,编译发生错误。
补充一嘴,如果需要记录日志,那么你需要根据需要创建好脚本中写的日志文件,比如我在C盘的script文件夹下创建好PlOrCreationLog.txt文件用于存储日志。这样脚本运行时就会将日志写到此文件中,否则不会有日志。
日志:
重要的事情再说一遍:
- SAP客户端只登录一个集团,且要打开在初始界面
- 要读取的Excel文件要事先打开,且只打开一个Excel文件
- 在最终保存数据前别敲回车键
- 如果要跳转其他事务代码,请加/n,如果只有一个事务代码则别用/n(否则每次都要重新打开一次程序,慢啊)
- 标点符号
- 事先创建好日志文件
- 用正规的Office软件
附本案例VBS脚本和Excel文件:SAP Gui Scripting案例4
点击标签SAP GUI Scripting可查看更多本系列文章。
如若转载,请注明出处:https://www.gavindong.com/4113.html