代码之家  ›  专栏  ›  技术社区  ›  Sevpoint

SAP GUI脚本:从ALV网格读取表或数据

  •  0
  • Sevpoint  · 技术社区  · 8 年前

    我目前正在创建一个自动化脚本,将在SAP表中搜索excel中的数据。

    我试图在SAP中记录这些步骤,但它只提供了以下信息:

    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/usr/lbl[18,15]").setFocus
    session.findById("wnd[0]/usr/lbl[18,15]").caretPosition = 10
    

    我知道它告诉我当前的手机地址。

    当我试图检查表名(F1)时,它给我的名称是“RFPOSXEXT”。

    screen field technical information

    我不确定如何继续在SAP表中搜索所需的值。

    我的问题是,如何设置表并循环遍历表中的行,直到找到要查找的文本?

    我相信它也只允许我搜索可见的行。

    下面是我在SAP中的表格。我将循环到作业行、文档编号和数量,如果它与excel中的“textToFind”匹配,那么我将能够编辑匹配的每个项目的文本。

    SAP ABAP List of G/L account line item display

    1 回复  |  直到 5 年前
        1
  •  3
  •   Storax    8 年前

    让我们假设您在ALV网格中显示数据,并且在写文章时会话已准备就绪。然后,以下代码将数据从SAP复制到excel中。您必须根据需要调整代码

        Dim wks As Worksheet
        Set wks = " your worksheet here ..."
    
        Dim Table As Object
        Dim cols As Long
        Dim rows As Long
        Dim i As Long, j As Long
    
        Set Table = Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
    
        rows = Table.RowCount - 1
        cols = Table.ColumnCount - 1
    
        Dim columns As Object
        Set columns = Table.ColumnOrder
    
    
        Dim arrCol() As Variant
        ReDim arrCol(cols)
        For j = 0 To cols
            arrCol(j) = (CStr(columns(j)))
        Next
        With wks
            .Range(.Cells(1, 1), .Cells(1, cols + 1)).Value = arrCol()
        End With
    
        For i = 0 To rows
            For j = 0 To cols
                arrCol(j) = Table.GetCellValue(i, CStr(columns(j)))                
            Next
    
            With wks
                .Range(.Cells(i + 2, 1), .Cells(i + 2, cols + 1)).Value = arrCol()
            End With
    
            If i Mod 10 = 0 Then
                Table.SetCurrentCell i, CStr(columns(0))
                DoEvents
            End If
        Next
    
    End Sub
    

    如果不使用griv视图控件,上述代码将失败。“会话”必须是一个有效的SAP GUI会话,指向打开网格视图的FBL3N。在我上面提供的链接中,您将看到hot这样做。