Daten aus Excel auslesen und ins ERP einlesen

  • Hi zusammen

    Da ich heute wieder im Büro bin, würde ich mich gerne mit dem Import in das ERP (Baan) befassen.

    Am besten fange ich mit dem auslesen von Daten an, damit ich nicht etwas falsches importiere. Welche Daten benötigt man um ein programm anzusteuern?


    Im Worktop (hauptübersicht) findet man ein Toolbar wo man Programme suchen kann (aus Window Info), in dieser Toolbar hat es auch ein editierbares Feld [CLASS:Edit;INSTANCE:2], wo man die Programme suchen kann.

    BAsicWindowInfo Title: WorkTop- [wt_erp01.wtd] Class: WorktopClass

    BasicControInfo: Class: ToolbarWindow32, Instance: 3

    Control Class=ToolbarWindow32, Instance=3, ClassnameNN=ToolbarWindow323, Name="", Adv.Mode= [CLASS:ToolbarWindow32;INSTANCE:3], ID=59392, Text=Programm ausführen


    Zusätzlich hat es einen Navigationsbereich wo die Programme Explorer ähnlich aufgelistet sind

    BasicWindowInfo Title: WorkTop- [wt_erp01.wtd] Class: WorktopClass

    BasicControlInfo: Class: SysTreeView32, Instance:1

    Control: AdvancedMode: [CLASS:SysTreeView32;INSTANCE:1]


    Wenn ich ein Programm mit dem AU3Recorder anklicke kommen folgende Infos;

    -Worktop (Hauptübersicht) aktiv = _WinWaitActivate("WorkTop - [wt_erp01.wtd]","")

    -Programm im Navigationsbreich öffne: _WinWaitActivate("tcibd0501m000 : General Item Data [User: pagnro] [400]","")


    Wenn ihr Zusatzinfos benötigt bitte mitteilen.

    Ich hoffe ihr könnt mir weiterhelfe, Vielen DAnk & Gruss

  • Screenshots wären sehr hilfreich, natürlich nur so das man nix Firmeninternes sieht. Und wie die Abfolge der Eingaben sein soll.

  • sorry hatte erst jetzt gesehen, dass du nochwas geschrieben hast. Klar kannste die per Mail schicken wenn du noch mehr hast. Sieht aus wie der Vorgänger von SAP :D.

  • SAP ist etwas besser, aber ansonsten nicht weit davon entfernt. Was für Daten benötigst du noch?

  • Da ich noch nicht weis wie man die Programme im ERP ansteuern kann, habe ich mal ein Script geschrieben der anhand einer Excel Datei, andere Excel Dateien findet (mit Fehlermeldung wenn nicht vorhanden), die richtige Tabelle anwählt und die DAten einträgt. Zusätzlich habe ich eine Schleife eingebaut damit die Array durchläuft und alle Zeilen in div. Excel/Reiter einträgt.

    [autoit]


    ;===START===
    #include <Excel.au3>
    #include <File.au3>
    #include <Array.au3>
    HotKeySet("{ESC}","Beenden")
    Func Beenden()
    While 1
    Exit
    WEnd
    EndFunc
    $FilePath1 = "C:\Users\RP2\Desktop\daten\ImportDatei.xlsx" ; Dateiquelle
    $oExcel1 = _ExcelBookOpen($FilePath1); Datei öffen
    ;File existenz Überprüfung
    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "Import Datei nicht gefunden")
    Exit
    EndIf
    ;Daten aus Excel auslesen
    _ExcelSheetActivate($oExcel1, "Tabelle2") ; Richtigen Reiter aktivieren
    $aSheet =_ExcelReadSheetToArray($oExcel1) ; Daten auslesen
    _ArrayDisplay( $aSheet, "Import Overview", 10) ;Tabelle im Display anzeigen
    $MsgBox1 =MsgBox(1, "Check Data!", "Import Data?")
    If $MsgBox1= 2 Then MsgBox(0, "Info", "Script aborted")
    If $MsgBox1= 2 Then Exit
    $r = 1
    $rows = UBound($aSheet)-2
    For $i = 1 to $rows
    $r = $r +1
    ;Anhand von der Array Info in Spalte2 die Excel Datei finden
    $FilePath2 = "C:\Users\RP2\Desktop\daten\"& $aSheet[$r][2] & ".xlsx"
    $oExcel2 = _ExcelBookOpen($FilePath2); Datei öffen
    ;Prüfen Artikel Datei existent
    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "Artikel Datei nicht gefunden")
    Exit
    EndIf
    ;Im Excel den Reiter aktivieren --> Array Spalte 1
    _ExcelSheetActivate($oExcel2, $aSheet[$r][1]) ; Richtigen Reiter aktivieren
    Sleep(1)
    _ExcelWriteCell($oExcel2, $aSheet[$r][3],2,3)
    _ExcelWriteCell($oExcel2, $aSheet[$r][4],2,4)
    _ExcelWriteCell($oExcel2, $aSheet[$r][5],2,5)
    sleep(50);Die Früchte meiner Arbeit geniesen :)
    _ExcelBookClose($oExcel2, 1) ; Import Datei schließen
    Next
    MsgBox(0,"", $rows & " Artikle wurden eingelesen")
    _ExcelBookClose($oExcel1, 0) ; Import Datei schließen

    [/autoit]

    An diesem Punkt erstmals vielen Dank für eure Unterstützung, jetzt fehlt nur noch die Hürde von der ERP Ansteuerung.... :) FAlls sich dies zu komplex aufweist, werde ich das ERP mit Tastatur befehlen bedienden mit der Funktion Send. Wobei mir von dem abgeraten wurde in den ersten Postings diese tread.

  • Sorry bin erst heute morgen zu gekommen, mir die Doku anzusehen. Haben die 4 Felder untereinander keine ID?

    Edit: Warum zählst du eigentlich $r hoch und nutz nicht $i? (Zeile 31)
    Und warum schreibst du es nicht so
    For $i = 1 To $aSheet[0][0]
    in Zeile 30?

    Einmal editiert, zuletzt von m-obi (22. Mai 2012 um 10:12)

  • Ja da mit der Zeile 30/31 da muss ein Anfänger am Werk gewesen sein... :D Habe ich mir aus den Hilfen zusammen gereimt.... Danke für dein Tip werde ich ändern

    Zum ERP;

    Worktop hat keine ID, nur Basic Window Info Title: WorkTop - [wt_erp01.wtd], Class: Worktop Class, keine Basic control Info, aber im Visible Text steht

    wt_erp01.wtd
    InformationView
    NavigationView
    Programm ausführen
    Programm ausführen
    &Programm:
    Standard

    Das Feld um die Navigation hat eine ID 12, SysTabControl32

    Der Reiter Navigation hat eine ID 25, SysTreeView32

    DAs Programm Plan Item Data_ Title cprpd1500m000 : Plan Item Data [User: pagnro] [400] Class: AfxFrameOrView80u hat keine ID aber in sich 5 Rahmen

    1. WindowToolbar, 2. Instance 1 mit ID, 3. Instance 2 ohneID, 4. Instance3 ohenID, 5. Instance4 mitID

    Wenn ein Artikel vom Prof. PlanItemData geöffnet wird, geht das letzte Feld auf Plan Items da kann man die Artikel Details ansehen

    Title: cprpd1101s000 : Plan Items [User: pagnro] [400] Class: AfxFrameOrView80u hat keine IDs mehr aber viele Button funktionen.


    Sind die Infos ausreichend?

    LG

  • Ich hab erstmal dein Script aufgeräumt :D

    Spoiler anzeigen
    [autoit]

    #Include <Excel.au3>
    #Include <File.au3>
    #Include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}", "_Beenden")

    [/autoit] [autoit][/autoit] [autoit]

    $sFilePath1 = "C:\Users\RP2\Desktop\daten\ImportDatei.xlsx" ; Dateiquelle
    $oExcel1 = _ExcelBookOpen($sFilePath1) ; Datei öffen
    ;File existenz Überprüfung
    Switch @error
    Case 1
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    _Beenden()
    Case 2
    MsgBox(0, "Error!", "Import Datei nicht gefunden")
    _Beenden()
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    ;Daten aus Excel auslesen
    _ExcelSheetActivate($oExcel1, "Tabelle2") ; Richtigen Reiter aktivieren
    $aSheet = _ExcelReadSheetToArray($oExcel1) ; Daten auslesen
    _ArrayDisplay($aSheet, "Import Overview", 10) ;Tabelle im Display anzeigen
    $iMB = MsgBox(1, "Check Data!", "Import Data?")
    If $iMB = 2 Then
    MsgBox(0, "Info", "Script aborted")
    _Beenden()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aSheet[0][0]
    ;Anhand von der Array Info in Spalte2 die Excel Datei finden
    $sFilePath2 = "C:\Users\RP2\Desktop\daten\" & $aSheet[$i][2] & ".xlsx"
    $oExcel2 = _ExcelBookOpen($sFilePath2) ; Datei öffen
    ;Prüfen Artikel Datei existent
    Switch @error
    Case 1
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    _Beenden()
    Case 2
    MsgBox(0, "Error!", "Artikel Datei nicht gefunden")
    _Beenden()
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    ;Im Excel den Reiter aktivieren --> Array Spalte 1
    _ExcelSheetActivate($oExcel2, $aSheet[$i][1]) ; Richtigen Reiter aktivieren
    _ExcelWriteCell($oExcel2, $aSheet[$i][3], 2, 3)
    _ExcelWriteCell($oExcel2, $aSheet[$i][4], 2, 4)
    _ExcelWriteCell($oExcel2, $aSheet[$i][5], 2, 5)
    Sleep(50) ; Die Früchte meiner Arbeit genießen :)
    _ExcelBookClose($oExcel2) ; Import Datei schließen
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", $aSheet[0][0] & " Artikle wurden eingelesen")
    _ExcelBookClose($oExcel1, 0) ; Import Datei schließen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Beenden()
    _ExcelBookClose($oExcel1, 0)
    _ExcelBookClose($oExcel2, 0)
    Exit
    EndFunc ;==>Beenden

    [/autoit]
  • Hahaha!! :D Vielen Dank, so muss das also aussehen ;)... Das mit den versätzen und so verstehe ich nicht, ist aber im Moment unwichtig. Werde ich zuhause lesen....

  • Es macht es lesbarer und strukturierter, man findet schneller Fehler und es sieht vorallem besser aus. Wenn du mal Programme schreibst, die Andere auch einsehen können, ist es besser, da eine Ordnung drin zuhaben.