【SAP】优化翻页方法

对于 SAP 系统中的表格,我们需要通过翻页到最后才能获取表中的完整数据,参考:http://support.i-search.com.cn/article/1540543334490

感觉要一次次翻页太麻烦,于是尝试了一下子定位到表格最后,结果发现中间部分的数据都没有加载出来,因此还是要通过一次次翻页到最后才行。

之前用的方法是先通过总行数除以一页显示的行数计算出需要翻页的次数,然后不断循环键盘输入 pagedown 的方法来完成翻页动作,这种方法的缺点在于只要当前鼠标焦点不在 SAP 上(比如突然弹出了一个窗口),或者由于每次翻页之间的延时设置太短导致中间有部分翻页没有效果,都会造成表格可能无法完全加载的问题。

本着能用 SAP 自带方法就尽量不用鼠标点击和键盘输入的原则,现提供一个更好的思路,通过查阅 SAP 文档发现表格元素有个 firstVisibleRow 属性可以显示当前第一行在总行数中的位置,同样也可以设置某一行作为当前页面的第一行:
【SAP】优化翻页方法
通过循环设置这个值可以达到翻页的效果。

另外还有一个 visibleRowCount 属性可以显示当前一页表格的行数。

下面给出代码:

import win32com.client

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')  # 获取SAP表格
rows = e.rowCount  # 行数
row = e.visibleRowCount
j = 0
while e.firstVisibleRow < rows - row:
    e.firstVisibleRow = j*row
    j += 1

这样不管 SAP 是最大化还是窗口化都能翻页到最下面了