neues problem datenübertragung, bitte ganz schnell =(

  • guten morgen leute, gestern hat ich ja schon mal nen thread wegen excel tabellen übertragung, ziemlich cool das das auch so schnell ging...
    aber im grunde handelt es sich diesmal um was anderes, ich soll ein script schreiben mit autoIT sodass es aus einer excel tabelle zelle für zelle, bzw . zeile für zeile kopiert und dann in eine oberfläche eintragt, also woanders hinkopiert. ( soll im endeffekt in so nen formular von sharepoint ).

    nur ich krieg das net hin mit den 2 schleifen, die sollen ja dafür da sein das das programm aufhört bzw aussteigt wenn eine leere zelle/zeile auftritt, also alle daten sozusagen kopiert sind.

    könnt ihr mir vielleicht nen quellcode posten, oder nen beispiel wie auch immer, brauche schnell ein paar ergebnisse damit ich das möglichst schnell fertig stellen kann :/

    danke im vorraus..
    mfg slydon

  • also mein aktueller quelltext sieht so aus:

    [autoit]

    #include <Excel.au3>
    ;Quelle öffnen
    $open = _ExcelBookOpen ("C:\Dokumente und Einstellungen\myvision\Eigene Dateien\Fabian's XP-VM\Autoit Scripts\hardware.xls")
    $new = _ExcelBookOpen ("C:\Dokumente und Einstellungen\myvision\Eigene Dateien\Fabian's XP-VM\Autoit Scripts\hardwareCOPY.xls")

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

    ;1. Schleife
    for $i=1 to 50
    ;2. Schleife
    for $j=1 to 50
    $zelle = _ExcelReadCell($open, $i, $j)
    sleep(150)
    If $zelle = "" Then
    ExitLoop
    Else
    _ExcelWriteCell($new, $zelle, $i, $j)
    sleep(150)
    Endif
    Next
    Next

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

    _ExcelBookClose($open)

    [/autoit]

    der funktioniert auch einwandfrei :)
    nur das ist eben nur für excel.. es soll ja aus einer excel tabelle kopieren und das dann in etwas anderes einfügen, und nicht in eine excel tabelle.. also eig. ohne das _excelwritecell ( glaub ich ) ..nur da weiß ich nicht genau wie das gehen soll..
    im endeffekt gehts darum, das von einer alten webplatform daten die sich jetzt in einer excel tabelle befinden mit tastensimulierungen wie auch immer in eine neue sharepoint oberfläche kopiert werden sollen, und das soll mit autoIT geschehen.. und dafür muss ich nen script schreiben..

    • Offizieller Beitrag

    Besser als eine For...Next-Schleife zum auslesen ist es, wenn Du Endlosschleifen dafür verwendest, weil Du ja nicht vorher wissen kannst, wie viele Zeilen und Spalten es in der Tabelle gibt.
    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <Excel.au3>

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

    $oExcel = _ExcelBookNew()

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

    ; diese For...Next-Schleifen erstellen nur eine Exceltabelle mit unterschiedlichen "Zeilenlängen"
    For $i = 1 To 20
    For $j = 1 To Random(5, 15, 1)
    _ExcelWriteCell($oExcel, Random(100, 999, 1), $i, $j)
    Next
    Next

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

    ; ab hier werden die Daten aus der Tabelle ausgelesen
    $row = 1
    $col = 1
    $out = ''
    While True
    $val = _ExcelReadCell($oExcel, $row, $col)
    If $val = '' Then
    If $col = 1 Then ExitLoop
    MsgBox(0, 'Zeile ' & $row, $out)
    $out = ''
    $col = 1
    $row += 1
    ContinueLoop
    EndIf
    $out &= $val & ', '
    $col += 1
    WEnd

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

    MsgBox(0, '', 'ok zum beenden')
    _ExcelBookClose($oExcel)

    [/autoit]

    Wenn Du jetzt die Daten woanders einfügen willst, kannst Du das mit ControlCommand oder ControlSend machen. Dazu brauchst Du aber zusätzliche Informationen über das andere Programm.
    Diese bekommst Du mit "Au3Info.exe" aus dem AutoIt-Verzeichnis.

  • danke für die schnelle hilfe^^
    ja da hast du recht, ich weiß auch net genau wie groß die tabelle wird, auf jeden fall groß :)

    also von der excel tabelle in eine weboberfläche ( sharepoint formular ) solls eingefügt werden^^

    und bin erst seit 2 wochen in der autoIT scene, aber lerne jeden tag auf der arbeit dazu, bring mir iwas bei oder durch das forum hier.. control command kenn ich noch gar net..

    • Offizieller Beitrag

    Vermutlich ist es dann besser nicht Zelle für Zelle auszulesen, sondern alles in ein Array einzufügen und dann dieses abzuarbeiten.
    Dazu bietet die Excel-UDF _ExcelReadSheetToArray($oExcel) an. Allerdings ist diese Funktion nicht für das Deutsche Excel geeignet (Notation R1C1 statt Z1S1). Deshalb mußt du eine kleine Änderung vornehmen. Habe im Code beschrieben, wie es geht.

    Spoiler anzeigen
    [autoit]

    ; Das Excel-Include ist fehlerhaft. Gehe in Scite mit dem Cursor auf #include <Excel.au3> und drücke: ALT+i
    ; Ändere im Include ab Zeile 780 auf Deutsche Notation:
    ;##############################################################################################################
    ; Extract integer last row and col
    Local $iLastRow = StringInStr($sLastCell, "Z");"R") <== Z statt R
    Local $iLastColumn = StringInStr($sLastCell, "S");"C") <== S statt C
    $iLastRow = Number(StringMid($sLastCell, $iLastRow + 1, $iLastColumn - $iLastRow - 1))
    $iLastColumn = Number(StringMid($sLastCell, $iLastColumn + 1))

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

    ; Return 0's if the sheet is blank
    ;~ If $sLastCell = "R1C1" And $oExcel.Activesheet.Cells($iLastRow, $iLastColumn).Value = "" Then Return $avRET
    If $sLastCell = "Z1S1" And $oExcel.Activesheet.Cells($iLastRow, $iLastColumn).Value = "" Then Return $avRET
    ;##############################################################################################################
    ; Beim Speichern wirst du aufgefordert einen Neuen Dateinamen zu vergeben (Excel_DE.au3)

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

    #include <Excel_DE.au3> ; <== auf Deutsche Notation geändertes Include

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

    Local $sFilePath = @MyDocumentsDir & '\test.xls'
    Local $oExcel = _ExcelBookOpen($sFilePath, 0)

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

    ; Tabelle in Array lesen
    Local $arSheet = _ExcelReadSheetToArray($oExcel)
    If Not IsArray($arSheet) Then
    $oExcel.Quit
    Exit MsgBox(0, 'Fehler', 'Tabelle konnte nicht gelesen werden.')
    Else
    If $arSheet[0][0] = 0 And $arSheet[0][1] = 0 Then
    $oExcel.Quit
    Exit MsgBox(0, 'Fehler', 'Tabelle enthält keine Daten.')
    EndIf

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

    ; Arrayinhalt verarbeiten
    For $i = 1 To UBound($arSheet) -1
    For $j = 1 To UBound($arSheet, 2) -1
    ; Verarbeiten: $arSheet[$i][$j]
    Next
    Next
    $oExcel.Quit

    [/autoit]