Daten von Website in Excel importieren

  • $oExcel.Range("A:A").NumberFormat = "@" ; Spalte A
    $oExcel.Range("A:C").NumberFormat = "@" ; Spalten A bis C

  • Sooo,

    mühsam ernährt sich das Eichhörnchen...
    Brauche leider wieder bzw, immernoch Hilfe für den Rest...
    Im Screenshot seht ihr das bisherige Ergebnis, es müssen also noch

    die Zeilen 2-4 gelöscht werden
    die Spalten 1-3 auf die Positionen 4-6 verschoben werden, bzw direkt passend eingefügt werden
    Und in Spalte 1 das aktuelle Jahr, in Spalte 2 den aktuellen Monat, und in Spalte 3 der aktuelle Tag eingefügt werden

    In Excel kann man das ja mit =Heute() machen und dann die Zelle entsprechend formatieren, dass nur das Jahr angezeigt werden soll usw.
    Ich hoffe es findet sich noch jemand...

    Meine bisherige Bastelei:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    #Include <Date.au3>

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

    Local $url = 'http://www.lanuv.nrw.de/luft/temes/0102/EVOG.htm#jetzt'
    Local $oIE = _IECreate($url, 0, 0)
    Local $oTable = _IETableGetCollection($oIE, 0)
    Local $array = _IETableWriteToArray($oTable, True)
    ;_ArrayDisplay($array)

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

    ; Lösche Spalten und zeige das Ergebnis an:
    ArrayDeleteColumn($array, 10)
    ArrayDeleteColumn($array, 9)
    ArrayDeleteColumn($array, 8)
    ArrayDeleteColumn($array, 5)
    ArrayDeleteColumn($array, 4)
    ArrayDeleteColumn($array, 3)
    ArrayDeleteColumn($array, 2)
    ArrayDeleteColumn($array, 1)

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

    ;Dim $array[2][2] = [[1,3],[2,4]]
    ;_ArrayDisplay($array)
    ;ReDim $array[53][6]
    ;$array[0][2] = 1
    ;$array[1][2] = 2
    ;_ArrayDisplay($array)

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

    ;_ArrayDisplay($array, "Nachher")
    ; MsgBox(0, "Fehler", "Fehler beim löschen aufgetreten" & @CRLF & "Fehlercode: " & @error)

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

    ; Löscht aus einem 2D-Array eine Spalte (0-basierte Angabe)
    Func ArrayDeleteColumn(ByRef $a_Arr, $d_Column = 0)
    ;by AspirinJunkie
    Local Const $NROWS = UBound($a_Arr)
    Local Const $NCOLS = UBound($a_Arr, 2)
    If @error Then Return (SetError(1, @error, False))
    If $d_Column > $NCOLS - 1 Then Return (SetError(2, 0, False))

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

    For $row = 0 To $NROWS - 1
    For $col = $d_Column + 1 To $NCOLS - 1
    $a_Arr[$row][$col - 1] = $a_Arr[$row][$col]
    Next
    Next

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

    ReDim $a_Arr[$NROWS][$NCOLS - 1]

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

    Return True
    EndFunc ;==>ArrayDeleteColumn

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

    _IEQuit($oIE)
    Local $oExcel = _ExcelBookNew(1)
    Local $sFormat = "'##.# '0,00"
    ;$oExcel.Cells(7, 3).NumberFormat = "@"
    ;_ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    $oExcel.Range("A:A").NumberFormat = "@" ; Spalte A
    $oExcel.Range("A:C").NumberFormat = "@" ; Spalten A bis C
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WRI", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 2, 1, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

    [/autoit]

    Danke schonmal an Water für die konstante Hilfe bisher, wirklich erste Sahne ;)

    Einmal editiert, zuletzt von Chromebacher (7. Februar 2014 um 15:17)

    • Zeilen 2-4 löschen: _ExcelRowDelete
    • Spalten 1-3 auf die Positionen 4-6 verschoben werden, bzw direkt passend eingefügt werden: Entweder Array entsprechend aufbereiten und dann schreiben oder _ExcelColumnInsert, _ExcelReadArray, _ExcelWriteArray und _ExcelColumnDelete
    • Spalte 1 das aktuelle Jahr, in Spalte 2 den aktuellen Monat, und in Spalte 3 den aktuellen Tag einfügen: _ExcelWriteCell($oExcel, @Year, 1, 1) und _ExcelWriteCell($oExcel, @Mon, 1, 2) und _ExcelWriteCell($oExcel, @MDay, 1, 3)
  • Hey Water,

    vielen Dank - bin schon viel weiter gekommen....

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    #Include <Date.au3>

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

    Local $url = 'http://www.lanuv.nrw.de/luft/temes/0102/EVOG.htm#jetzt'
    Local $oIE = _IECreate($url, 0, 0)
    Local $oTable = _IETableGetCollection($oIE, 0)
    Local $array = _IETableWriteToArray($oTable, True)

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

    _ArrayDisplay($array)

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

    _ArrayDelete($array, 53)
    _ArrayDelete($array, 51)
    _ArrayDelete($array, 50)
    _ArrayDelete($array, 48)
    _ArrayDelete($array, 46)
    _ArrayDelete($array, 44)
    _ArrayDelete($array, 42)
    _ArrayDelete($array, 40)
    _ArrayDelete($array, 38)
    _ArrayDelete($array, 36)
    _ArrayDelete($array, 34)
    _ArrayDelete($array, 32)
    _ArrayDelete($array, 30)
    _ArrayDelete($array, 28)
    _ArrayDelete($array, 26)
    _ArrayDelete($array, 24)
    _ArrayDelete($array, 22)
    _ArrayDelete($array, 20)
    _ArrayDelete($array, 18)
    _ArrayDelete($array, 16)
    _ArrayDelete($array, 14)
    _ArrayDelete($array, 12)
    _ArrayDelete($array, 10)
    _ArrayDelete($array, 8)
    _ArrayDelete($array, 6)
    _ArrayDelete($array, 4)
    _ArrayDelete($array, 3)
    _ArrayDelete($array, 2)
    _ArrayDelete($array, 1)

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

    _ArrayDisplay($array)

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

    ; Lösche Spalten
    ArrayDeleteColumn($array, 10)
    ArrayDeleteColumn($array, 9)
    ArrayDeleteColumn($array, 8)
    ArrayDeleteColumn($array, 5)
    ArrayDeleteColumn($array, 4)
    ArrayDeleteColumn($array, 3)
    ArrayDeleteColumn($array, 2)
    ArrayDeleteColumn($array, 1)

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

    ; MsgBox(0, "Fehler", "Fehler beim löschen aufgetreten" & @CRLF & "Fehlercode: " & @error)

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

    ; Löscht aus einem 2D-Array eine Spalte (0-basierte Angabe)
    Func ArrayDeleteColumn(ByRef $a_Arr, $d_Column = 0)
    ;by AspirinJunkie
    Local Const $NROWS = UBound($a_Arr)
    Local Const $NCOLS = UBound($a_Arr, 2)
    If @error Then Return (SetError(1, @error, False))
    If $d_Column > $NCOLS - 1 Then Return (SetError(2, 0, False))

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

    For $row = 0 To $NROWS - 1
    For $col = $d_Column + 1 To $NCOLS - 1
    $a_Arr[$row][$col - 1] = $a_Arr[$row][$col]
    Next
    Next

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

    ReDim $a_Arr[$NROWS][$NCOLS - 1]

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

    Return True
    EndFunc ;==>ArrayDeleteColumn

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

    _IEQuit($oIE)
    Local $oExcel = _ExcelBookNew(1)
    ;Local $sFormat = "'##.# '0,00"
    ;$oExcel.Cells(7, 3).NumberFormat = "@"
    ;_ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    ;$oExcel.Range("A:A").NumberFormat = "@" ; Spalte A
    $oExcel.Range("D:F").NumberFormat = "@" ; Spalten A bis C
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WR", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 4, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

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

    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Year, $i, 1) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Mon, $i, 2) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @MDay, $i, 3) ;Write to the Cell
    Next

    [/autoit]

    Damit ist die Aufgabe eigentlich gelöst...
    In weiß aber genau, dass die nächste Anforderung ist, die Werte künftiger Tage in die bestehende Datei anzufügen.
    Kannst du mir hierbei auch weiterhelfen?

    Einmal editiert, zuletzt von Chromebacher (7. Februar 2014 um 15:18)

  • Setze bei Mouseclick den 5. Parameter auf 0. Dann gehts ohne Wartezeit :)
    speed [optional] the speed to move the mouse in the range 1 (fastest) to 100 (slowest). A speed of 0 will move the mouse instantly. Default speed is 10.

  • Klar.
    Wie wird die genaue Aufgabenstellung lauten? Datensätze in die erste leere Zeile am Ende anhängen?

  • Hey Water, da bist du ja wieder,...
    Zuverlässig wie eh und je ;)

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    #Include <Date.au3>

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

    Local $url = 'http://www.lanuv.nrw.de/luft/temes/0102/EVOG.htm#jetzt'
    Local $oIE = _IECreate($url, 0, 0)
    Local $oTable = _IETableGetCollection($oIE, 0)
    Local $array = _IETableWriteToArray($oTable, True)

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

    ;_ArrayDisplay($array)

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

    _ArrayDelete($array, 53)
    _ArrayDelete($array, 51)
    _ArrayDelete($array, 50)
    _ArrayDelete($array, 48)
    _ArrayDelete($array, 46)
    _ArrayDelete($array, 44)
    _ArrayDelete($array, 42)
    _ArrayDelete($array, 40)
    _ArrayDelete($array, 38)
    _ArrayDelete($array, 36)
    _ArrayDelete($array, 34)
    _ArrayDelete($array, 32)
    _ArrayDelete($array, 30)
    _ArrayDelete($array, 28)
    _ArrayDelete($array, 26)
    _ArrayDelete($array, 24)
    _ArrayDelete($array, 22)
    _ArrayDelete($array, 20)
    _ArrayDelete($array, 18)
    _ArrayDelete($array, 16)
    _ArrayDelete($array, 14)
    _ArrayDelete($array, 12)
    _ArrayDelete($array, 10)
    _ArrayDelete($array, 8)
    _ArrayDelete($array, 6)
    _ArrayDelete($array, 4)
    _ArrayDelete($array, 3)
    _ArrayDelete($array, 2)
    _ArrayDelete($array, 1)

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

    ;_ArrayDisplay($array)

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

    ; Lösche Spalten
    ArrayDeleteColumn($array, 10)
    ArrayDeleteColumn($array, 9)
    ArrayDeleteColumn($array, 8)
    ArrayDeleteColumn($array, 5)
    ArrayDeleteColumn($array, 4)
    ArrayDeleteColumn($array, 3)
    ArrayDeleteColumn($array, 2)
    ArrayDeleteColumn($array, 1)

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

    ; MsgBox(0, "Fehler", "Fehler beim löschen aufgetreten" & @CRLF & "Fehlercode: " & @error)

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

    ; Löscht aus einem 2D-Array eine Spalte (0-basierte Angabe)
    Func ArrayDeleteColumn(ByRef $a_Arr, $d_Column = 0)
    ;by AspirinJunkie
    Local Const $NROWS = UBound($a_Arr)
    Local Const $NCOLS = UBound($a_Arr, 2)
    If @error Then Return (SetError(1, @error, False))
    If $d_Column > $NCOLS - 1 Then Return (SetError(2, 0, False))

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

    For $row = 0 To $NROWS - 1
    For $col = $d_Column + 1 To $NCOLS - 1
    $a_Arr[$row][$col - 1] = $a_Arr[$row][$col]
    Next
    Next

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

    ReDim $a_Arr[$NROWS][$NCOLS - 1]

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

    Return True
    EndFunc ;==>ArrayDeleteColumn

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

    _IEQuit($oIE)
    ;Local $oExcel = _ExcelBookNew(1)
    ;Local $oExcel = _ExcelBookOpen ( "c:\temp\lanuv.xlsx" )

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

    Local $sFilePath1 = @ScriptDir & "\lanuv.xlsx" ;This file should already exist ;Local $sFilePath1 = @ScriptDir & "\lanuv.xlsx"
    Local $oExcel = _ExcelBookOpen($sFilePath1)

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

    If @error = 1 Then
    MsgBox($MB_SYSTEMMODAL, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox($MB_SYSTEMMODAL, "Error!", "File does not exist!")
    Exit
    EndIf

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

    ;Local $sFormat = "'##.# '0,00"
    ;$oExcel.Cells(7, 3).NumberFormat = "@"
    ;_ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    ;$oExcel.Range("A:A").NumberFormat = "@" ; Spalte A
    $oExcel.Range("D:F").NumberFormat = "@" ; Spalten A bis C
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WR", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 4, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

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

    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Year, $i, 1) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Mon, $i, 2) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @MDay, $i, 3) ;Write to the Cell
    Next

    [/autoit]

    Damit pappt er die Daten wenigstens schonmal in eine bestehende Datei.
    Chic wäre, wenn die Datei erstellt würde, wenn sie nicht existiert.
    Dann soll jeden Tag in diese Datei ab der ersten freien Zeile weitergeschrieben werden und die Datei automatisch gespeichert und Excel beendet werden.

    Einmal editiert, zuletzt von Chromebacher (7. Februar 2014 um 15:18)

  • If Not FileExists(@ScriptDir & "\lanuv.xlsx") Then
    ; Hier der Teil um ein neues Workbook anzulegen, die Headerzeilen zu schreiben und die Datei zu sichern
    Else
    ; Bestehende Datei öffnen
    EndIf
    $iErsteZeile = $oExcel.ActiveSheet.UsedRange.Rows.Count + 1

  • Hey Water,

    hast mich schon wieder ordentlich weiter gebracht....
    Hier mein Skript

    Spoiler anzeigen
    [autoit]

    ;Including Skripts
    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    #Include <Date.au3>

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

    ;Open URL and save as array
    Local $url = 'http://www.lanuv.nrw.de/luft/temes/0102/EVOG.htm#jetzt'
    Local $oIE = _IECreate($url, 0, 0)
    Local $oTable = _IETableGetCollection($oIE, 0)
    Local $array = _IETableWriteToArray($oTable, True)

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

    ;Array cleaning (Delete not needed Rows)
    _ArrayDelete($array, 53)
    _ArrayDelete($array, 51)
    _ArrayDelete($array, 50)
    _ArrayDelete($array, 48)
    _ArrayDelete($array, 46)
    _ArrayDelete($array, 44)
    _ArrayDelete($array, 42)
    _ArrayDelete($array, 40)
    _ArrayDelete($array, 38)
    _ArrayDelete($array, 36)
    _ArrayDelete($array, 34)
    _ArrayDelete($array, 32)
    _ArrayDelete($array, 30)
    _ArrayDelete($array, 28)
    _ArrayDelete($array, 26)
    _ArrayDelete($array, 24)
    _ArrayDelete($array, 22)
    _ArrayDelete($array, 20)
    _ArrayDelete($array, 18)
    _ArrayDelete($array, 16)
    _ArrayDelete($array, 14)
    _ArrayDelete($array, 12)
    _ArrayDelete($array, 10)
    _ArrayDelete($array, 8)
    _ArrayDelete($array, 6)
    _ArrayDelete($array, 4)
    _ArrayDelete($array, 3)
    _ArrayDelete($array, 2)
    _ArrayDelete($array, 1)
    _ArrayDelete($array, 0)

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

    ;Array delete not needed Columns
    ArrayDeleteColumn($array, 10)
    ArrayDeleteColumn($array, 9)
    ArrayDeleteColumn($array, 8)
    ArrayDeleteColumn($array, 5)
    ArrayDeleteColumn($array, 4)
    ArrayDeleteColumn($array, 3)
    ArrayDeleteColumn($array, 2)
    ArrayDeleteColumn($array, 1)

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

    ;Neuaufbau des Arrays
    Func ArrayDeleteColumn(ByRef $a_Arr, $d_Column = 0)
    Local Const $NROWS = UBound($a_Arr)
    Local Const $NCOLS = UBound($a_Arr, 2)
    If @error Then Return (SetError(1, @error, False))
    If $d_Column > $NCOLS - 1 Then Return (SetError(2, 0, False))

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

    For $row = 0 To $NROWS - 1
    For $col = $d_Column + 1 To $NCOLS - 1
    $a_Arr[$row][$col - 1] = $a_Arr[$row][$col]
    Next
    Next

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

    ReDim $a_Arr[$NROWS][$NCOLS - 1]

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

    Return True
    EndFunc

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

    ;IE end
    _IEQuit($oIE)

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

    ;Datei abfragen und ggf. erstellen im Programmverzeichnis
    If Not FileExists(@ScriptDir & "\lanuv.xlsx") Then
    Local $oExcel = _ExcelBookNew(1)
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WRi", "WGes"]
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)
    _ExcelBookSaveAs($oExcel, @ScriptDir & "\lanuv", "xlsx")
    ; Hier der Teil um ein neues Workbook anzulegen, die Headerzeilen zu schreiben und die Datei zu sichern
    Else
    Local
    $sFilePath1 = @ScriptDir & "\lanuv.xlsx" ;This file should already
    exist ;Local $sFilePath1 = @ScriptDir & "\lanuv.xlsx"
    Local $oExcel = _ExcelBookOpen($sFilePath1)
    ; Bestehende Datei öffnen
    EndIf

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

    Local $iErsteZeile = $oExcel.ActiveSheet.UsedRange.Rows.Count + 1

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

    ;Zellen formatieren
    $oExcel.Range("D:F").NumberFormat = "@" ; Spalten A bis C

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

    ;Werte aus Array in Excel einfügen
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 4, 0, 0)

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

    ;Datum in Spalte A,B,C einfügen
    For $i = 2 To 25 ;Loop
    ;For $iErsteZeile = 2 To 25 ;Loop
    ;_ExcelWriteCell($oExcel, @Year, $i, 1) ;Write to the Cell
    _ExcelWriteCell($oExcel, @Year, $iErsteZeile, 1) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    ;_ExcelWriteCell($oExcel, @Mon, $i, 2) ;Write to the Cell
    _ExcelWriteCell($oExcel, @Mon, $iErsteZeile, 2) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    ;_ExcelWriteCell($oExcel, @MDay, $i, 3) ;Write to the Cell
    _ExcelWriteCell($oExcel, @MDay, $iErsteZeile, 3) ;Write to the Cell
    Next

    [/autoit]

    Es wird erfolgreich eine Datei angelegt, sofern noch nicht vorhanden.
    Wenn vorhanden, wird erfolgreich in diese geschrieben.
    Das Datum wird in die erste leere Zeile eingefügt, allerdings soll dies ja für x Zeilen gemacht werden - hier weiß ich noch nicht wie.
    Auch das Auto speichern und die Werte müssen noch rein...

    Aber, ich bin heilfroh, das wir schon so weit sind (für meine Verhältnisse)

    :thumbup:

  • Was heisst mehrfach?
    Wie soll die Excel dann aussehen:

    Jahr Monat Tag
    Daten
    Daten
    Daten
    Jahr Monat Tag
    Daten
    Daten
    Daten
    ...

  • Die einfachste Lösung wäre, alle Daten aus dem Eingangsarray in einen zweiten Array zu kopieren (inkl. Datumszeilen) und den dann in Excel einzufügen.
    Damit könntest Du Dir auch die zeitaufwändige Spaltenlöscherei ersparen ;)

  • Gedanklich war ich irgendwo hier unterwegs, nur leider fehlt mir der richtige Kniff

    Spoiler anzeigen
    [autoit]

    If Not FileExists(@ScriptDir & "\lanuv.xlsx") Then
    Local $oExcel = _ExcelBookNew(1)
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WRi", "WGes"]
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)
    _ExcelBookSaveAs($oExcel, @ScriptDir & "\lanuv", "xlsx")

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

    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Year, $i, 1) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Mon, $i, 2) ;Write to the Cell
    Next
    For $i = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @MDay, $i, 3) ;Write to the Cell
    Next

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

    ; Hier der Teil um ein neues Workbook anzulegen, die Headerzeilen zu schreiben und die Datei zu sichern
    Else
    Local $sFilePath1 = @ScriptDir & "\lanuv.xlsx" ;This file should already exist ;Local $sFilePath1 = @ScriptDir & "\lanuv.xlsx"
    Local $oExcel = _ExcelBookOpen($sFilePath1)

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

    Local $iErsteZeile = $oExcel.ActiveSheet.UsedRange.Rows.Count + 1
    For $iErsteZeile = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Year, $iErsteZeile, 1) ;Write to the Cell
    Next
    For $iErsteZeile = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @Mon, $iErsteZeile, 2) ;Write to the Cell
    Next
    For $iErsteZeile = 2 To 25 ;Loop
    _ExcelWriteCell($oExcel, @MDay, $iErsteZeile, 3) ;Write to the Cell
    Next

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

    ; Bestehende Datei öffnen
    EndIf

    [/autoit]
  • Ich werde bei Gelegenheit einen Entwurf mit der neuen Excel UDF posten.

  • Das wäre toll, habe aus deiner Signatur die ExcelEX UDF heruntergeladen. Dort finde ich aber nur in die einzelnen Befehle als .au3.
    Wo muss ich die denn hinkopieren/einbinden? Muss ich bei include dann auch die neue Excel angeben?

  • Die neue Excel UDF ersetzt die bestehende. Beide zusammen können nicht verwendet werden.
    Ich poste ein Beispiel sobald ich mal Zeit finde.

  • Beispiel:

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>

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

    Global $sURL = "http://www.lanuv.nrw.de/luft/temes/0102/EVOG.htm#jetzt"
    Global $sExcel = @ScriptDir & "\lanuv.xlsx"
    Global $oIE = _IECreate($sURL, 0, 0)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _IECreate beendete mit Fehlercode " & @error)
    Global $oTable = _IETableGetCollection($oIE, 0)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _IETableGetCollection beendete mit Fehlercode " & @error)
    Global $aInput = _IETableWriteToArray($oTable, True)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _IETableWriteToArray beendete mit Fehlercode " & @error)
    _IEQuit($oIE)
    _ArrayDisplay($aInput)
    ; Datei abfragen und ggf. erstellen im Programmverzeichnis
    Global $oExcel = _Excel_Open(), $oBook
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _Excel_Open beendete mit Fehlercode " & @error)
    If Not FileExists($sExcel) Then
    $oBook = _Excel_BookNew($oExcel, 1)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _Excel_BookNew beendete mit Fehlercode " & @error)
    Global $aHeader[1][6] = [["Jahr", "Monat", "Tag", "Stunde", "WRi", "WGes"]]
    _Excel_RangeWrite($oBook, 1, $aHeader, "A1")
    Else
    $oBook = _Excel_BookOpen($oExcel, $sExcel)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _ExcelBookOpen beendete mit Fehlercode " & @error)
    EndIf
    Global $aOutput[UBound($aInput)][6], $iCount = 0
    Global $aDatum = StringSplit($aInput[0][8], ".")
    For $i = 5 To UBound($aInput) - 1 Step 2
    If $i = 51 Then $i = 52 ; Leerzeile übergehen
    $aOutput[$iCount][0] = $aDatum[3]
    $aOutput[$iCount][1] = Int($aDatum[2])
    $aOutput[$iCount][2] = Int($aDatum[1])
    $aOutput[$iCount][3] = $aInput[$i][0]
    $aOutput[$iCount][4] = $aInput[$i][6]
    $aOutput[$iCount][5] = StringReplace($aInput[$i][7], ".", ",")
    $iCount = $iCount + 1
    Next
    ReDim $aOutput[$iCount][UBound($aOutput, 2)]
    _ArrayDisplay($aOutput)
    ;Zellen formatieren
    $oExcel.Range("D:D").NumberFormat = "@" ; Text
    $oExcel.Range("A:C").NumberFormat = "0" ; Zahl
    $oExcel.Range("E:E").NumberFormat = "0" ; Zahl
    $oExcel.Range("F:F").NumberFormat = "0,0" ; Zahl
    Global $iErsteZeile = $oBook.Activesheet.UsedRange.Rows.Count + 1
    _Excel_RangeWrite($oBook, 1, $aOutput, "A" & $iErsteZeile)

    [/autoit]
  • Hey Water, vielen Dank!

    leider bekomme ich es nicht zum laufen,..
    Wenn ich es richtig verstehe, brauche ich doch die neue Excel.UDF namens Excel.au3 - oder?
    Diese muss ich doch dann mit der im Programme\AutoIT\Include austauschen - richtig?

    Wenn ich aber die Datei aus deiner Signatur herunterlade (die Datei Excel Rewrite Beta 4.zip) und diese entpacke - finde ich keine neue Excel.au3?!
    Hier finde ich nur die einzelnen kleinen .au3`s _ExcelBookOpen.au3 usw usf.

    Was mache ich falsch?

    ;)