SAP 系统表格处理技巧
首先,之前的帖子已经提到如何在 SAP 系统实现自动化,详见http://support.i-search.com.cn/article/1538017933135
以及如何通过 track 工具获取表格数据以及操作,详见http://support.i-search.com.cn/article/1539928060672
这篇帖子主要说一下表格数据获取方面的小技巧以及实际操作中有可能遇到的问题处理方法。
需求说明:获取项目文本列中的所有数据
根据之前的帖子我们知道可以通过以下函数获取单个表格数据
import sys, win32com.client,time
SapGuiAuto=win32com.client.GetObject("SAPGUI")
application=SapGuiAuto.GetScriptingEngine
connection = application.Children(0)
session = connection.Children(0)
e=session.findByID('wnd[0]/usr/cntlGRID1/shellcont/shell') #shell的ID号通过Track工具获取
#row=e.rowCount
value=e.getCellValue(0,'SGTXT') #参数0表示第一行,SGTXT表示标题即项目文本
print(value)
return(value)
只运行一下,可以看到获取文本内容
实现方法:
如果要获取整列的数据我们可以将以上函数封装成全局函数,将行数以及标题设置成变量,如下:
import sys, win32com.client,time
def get_value(r,title):
SapGuiAuto=win32com.client.GetObject(“SAPGUI”)
application=SapGuiAuto.GetScriptingEngine
connection = application.Children(0)
session = connection.Children(0)
e=session.findByID(‘wnd[0]/usr/cntlGRID1/shellcont/shell’)
value=e.getCellValue(r,title)
print(value)
return(value)
这样我们就可以通过循环实现遍历表格数据,循环之前我们需要通过以下函数获取列表的总行数。
其中行数变量的初始值 r=0,每读取完一个表格数据后行数 +1,这样就可以读取下一行的表格数据直到遍历完所有数据。
异常处理:
但是我在处理表格时发现了一个问题,就是当表格数据很少的时候获取的没有问题,当表格数据较多的时候获取一部分数据完成后就无法获取数据了。
随后我找到该条数据并未发现数据有任何异常,并且根据具体行数单独获取该文本也能正常获取,随后重新执行流程发现该条数据可以正常获取但是若干行后的数据依旧有此问题,经过多次尝试发现,如果数据较多,并且页面没有翻到后续数据的话,有可能后面的数据未刷新出来,导致无法通过函数获取,找到原因后就准备了解决方案,如下:
每次进到数据页面时,进行翻页操作,直到翻页到最后一页,使所有数据刷新出来。(不可以直接通过 Ctrl+End 的方式直接拖到最后,依旧无法获取)翻页次数通过 For 循环实现。
通过 rowCount 获取行数,因为每一页有 40 行数据,所以我们通过总行数除以 40 取整数得到翻页次数(row//40),然后通过 FOR 循环实现翻页
翻页完成后,执行遍历操作,这样所有数据就可以正常获取了!
若有错误或者更好的方法欢迎指点! 😃
技术贴,点赞了。这里我提供另外一种解决思路,SAP 系统的表格上面通常有个导出功能,可以直接将表格数据直接导出来(EXCEL),然后再直接提取 EXCEL 文件的数据。
不错