问题!
目前在我工作的地方,我们正在尝试使用SAPGui、Excel和VBA自动执行某种重复性任务。通常,我们从 SAP 的 TCodes 收集的大多数报告都显示为 GuiUserArea,这并不容易、整洁和快速解析。
解决方案!
无论如何,我设法根据某些类型的要求解析这些报告。因此,我第一次尝试解析任何报告(显示为 GuiUserArea)时,我想到了将报告保存为无格式文本然后使用 VBA(正则表达式、拆分, Text Length, ...) 而不是使用 GuiUserArea 方法和属性。请注意,使用此过程(保存文件)更容易和更快地解析信息,但是使用SAPGUI对象只是为了保存文件而不是完成更复杂的任务作为解析信息有什么意义......
使用 GuiUserArea 我想出了以下解决方案:
Sub ParseSAPGUI()
Dim objSAPGui As Object
Dim objApplication As Object
Dim objConnection As Object
Dim objSession As Object
If (objSAPGui Is Nothing) Then
Set objSAPGui = GetSAPGuiObject()
Set objApplication = GetSAPGuiScriptEngine(objSAPGui)
End If
If (objConnection Is Nothing) Then
Set objConnection = GetSAPGuiConnection(objApplication)
End If
If (objSession Is Nothing) Then
Set objSession = GetSAPGuiSession(objConnection)
End If
With objSession
Dim intItemsShown As Integer
Dim intVerticalScrollEndPoint As Integer
Dim intHorizontalScrollEndPoint As Integer
' Move to the end of the GuiUserArea
.findById("wnd[0]/usr").HorizontalScrollbar.Position = 10000
.findById("wnd[0]/usr").VerticalScrollbar.Position = 10000
' Store end points
intVerticalScrollEndPoint = .findById("wnd[0]/usr").VerticalScrollbar.Position
intHorizontalScrollEndPoint = .findById("wnd[0]/usr").HorizontalScrollbar.Position
' Move to the start of the GuiUserArea
.findById("wnd[0]/usr").HorizontalScrollbar.Position = 0
.findById("wnd[0]/usr").VerticalScrollbar.Position = 0
' Items per page being shown
intItemsShown = objSession.findById("wnd[0]/usr").Children.Count - 1
Dim i As Integer
Dim n As Integer
For i = 0 To intVerticalScrollEndPoint Step intItemsShown
.findById("wnd[0]/usr").VerticalScrollbar.Position = i
intItemsShown = objSession.findById("wnd[0]/usr").Children.Count - 1
For n = 0 To intItemsShown
Debug.Print .findById("wnd[0]/usr").Children.ElementAt(n).Text
Next n
Next i
End With
End Sub
上面显示的代码完美运行,除了以下语句:
它几乎可以解析所有类型的GuiUserArea报告,除了具有宽水平窗口的报告。我正在努力解决这些问题,但缺少SAPGUI对象的文档。
对于大量数据来说很慢而且很慢(因为我们正在使用 VBA 到 COM 对象,所以它应该是这样的)。尝试使用.NET和SAPGUI对象但没有成功以加快进程。
但在路的尽头, SAPGUI对象似乎不是为这类任务而设计的。
问题!
- 您还有其他方法可以尝试解析 GuiUserArea 吗?
- 您是否尝试过使用高级编程语言(甚至脚本语言)来与 SAP 系统而不是 VBA 进行交互?
- 您是否知道是否有任何其他方式与 SAP 系统交互而不是SAPGUI对象(您是否尝试过 SAP .NET 连接器?)