Ziel dieses Tutorials soll sein, Daten aus einem Excel-Arbeitsblatt auszulesen und auf der SAP Maske anzuzeigen.

Uns liegt dazu ein kleiner Dienstplan vor, der Schadensmeldungscodes Mitarbeitern zuordnet. Wir möchten diesen Mitarbeiter
anhand eines eingegebenen Codes automatisch ermitteln:


In der SAP Maske fügen wir ein Eingabefeld, einen Pushbutton sowie ein Ausgabefeld ein:

inputfield (20,1) "Lese Benutzer zu Code aus Excel Datei" (20,35) size="25" name="code"  default="TSC99"  -upperCase
inputfield
(20,70) size="15" name="usertocode" -upperCase -noLabel
pushbutton
(20,62) "ok" process="read_excel_va03.txt"

Im Inputscript "read_excel_va03.txt" rufen wir eine VB.NET Methode auf und übergeben den Dateinamen und Schadenscode als Parameter:

callvb utilities.exceldotnet.TestReadCellsExcel "D:\Excel\Dienstplan.xlsx" "&V[code]"
return

Wir implementieren die Methode "TestReadCellsExcel" in unserer Klasse "exceldotnet" der Klassenbibliothek "utilities.dll".Für die interaktion mit Excel verwenden wir die von Microsoft bereitgestellte Schnittstelle und fügen daher einen Verweis auf die entsprechende Klassenbibliothek in unser Projekt, sowie in unsere Klasse "exceldotnet" ein:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Imports Microsoft.Office.Interop
Imports guinet

Public Class exceldotnet

    Public Function TestReadCellsExcel(ByVal filename As String, ByVal code As String) As String

        Dim returncode = "1"
        Dim oXL As New Excel.Application
        Dim g As New guixt

        Try

            Dim oWB As Excel.Workbook
            Dim oSheet As Excel.Worksheet

            oXL = CreateObject("Excel.Application")
            oXL.Visible = False

            oWB = oXL.Workbooks.Open(filename)
            oSheet = oWB.ActiveSheet

            Dim range As Excel.Range = oSheet.UsedRange
            Dim c As Integer = 1

            For Each r In range.Rows

                If oSheet.Cells(c, 1).Value.ToString = code Then
                    g.SetVariable("usertocode", oSheet.Cells(c, 2).Value.ToString)
                    returncode = "0"
                    Exit For

                End If
                c += 1
            Next

        Catch

            oXL.ActiveWorkbook.Close(False)
            oXL.Quit()
            Return "Exception"

        End Try

        oXL.ActiveWorkbook.Close(False)
        oXL.Quit()

        Return returncode


    End Function

End Class

In Zeile 29 stellen wir den Namen des ermittelten Mitarbeiters direkt in eine GuiXT-Variable, das heißt, die Daten werden somit direkt auf der SAP Maske angezeigt.

Hinweis: Excel wird zwar "im Dunkeln" aufgerufen, muss aber auf dem entsprechenden PC installiert sein.


Das Ergebnis: