Daten von Website in Excel importieren

  • Stimmt, ein paar Änderungen sind notwendig:

    • UDF herunterladen und in ein temporäres Verzeichnis entpacken
    • Excel Rewrite.au3 und ExcelConstants.au3 in das Verzeichnis kopieren, wo auch Dein Skript liegt
    • Im Skript "#include <Excel.au3>" durch "#include <Excel Rewrite.au3" ersetzen
  • Hey, klasse Arbeit!
    Die neue Excel UDF hat nette Features.
    Auch sind die Befehle, z.b. die Angabe der Bereiche irgendwie übersichtlicher.

    Was jetzt irgendwie noch nicht geht ist, dass er die neue Datei direkt lanuv.xlsx nennt und die Änderungen automatisch speichert...
    Habe ein bisschen mit _Excel_BookSaveAs.au3 herumgespielt, aber so richtig will es nicht..

    Ansonsten ist das bisher richtig gut!

    Einmal editiert, zuletzt von Chromebacher (12. Februar 2014 um 15:10)

  • Du musst den vollen Pfad angeben, also: @ScriptDir & "\lanuv.xlsx"

  • Okay, das hat geklappt.
    Die Datei die dann erstellt wird kann Excel aber nicht öffnen. Wenn ich sie dann von .xlsx in.xls umbenenne kann ich sie öffnen und sehe aber nur die Spaltenüberschriften ohne Werte.
    Irgendwo hakt es noch. Ebenso beim speichern der bestehenden Datei

    Spoiler anzeigen
    [autoit]

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

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

    Global $sURL = "http://www.lanuv.nrw.de/luft/temes/heut/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")
    _Excel_BookSaveAs($oBook, @ScriptDir & "\LaNUV.xlsx")
    Else
    $oBook = _Excel_BookOpen($oExcel, $oExcel)
    _Excel_BookSave($oExcel)
    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]
  • Zeile

    [autoit]

    _Excel_BookSaveAs($oBook, @ScriptDir & "\LaNUV.xlsx")

    [/autoit]

    auf

    [autoit]

    _Excel_BookSaveAs($oBook, @ScriptDir & "\LaNUV.xlsx", $xlWorkbookDefault)

    [/autoit]

    ändern. Dann sollte die Datei im Format xlsx geschrieben werden und sauber lesbar sein.

    Die Zeile

    [autoit]

    $oBook = _Excel_BookOpen($oExcel, $oExcel)
    _Excel_BookSave($oExcel) ; <=== Diese hier

    [/autoit]

    bringt aber nicht wirklich was, oder?

  • Jetzt geht`s :rock: :rock: :rock:

    Danke dir!

    Hier mein Ergebnis:

    Spoiler anzeigen
    [autoit]

    ;LaNUV Clean Version

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

    ;Including Skripts
    #include <IE.au3>
    #include <array.au3>
    #include <MsgBoxConstants.au3>
    #include <Excel Rewrite.au3>
    #include <Constants.au3>

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

    ;Open URL and save as array
    Global $sURL = "http://www.lanuv.nrw.de/luft/temes/0203/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)

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

    ;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")
    _Excel_BookSaveAs($oBook, @ScriptDir & "\LaNUV.xlsx", $xlWorkbookDefault)
    Else
    $oBook = _Excel_BookOpen($oExcel, $sExcel)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Fehler", "Funktion _ExcelBookOpen beendete mit Fehlercode " & @error)
    EndIf

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

    Global $aOutput[UBound($aInput)][6], $iCount = 0
    Global $aDatum = StringSplit($aInput[0][8], ".")

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

    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

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

    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] [autoit][/autoit] [autoit]

    ;Excel speichern
    _Excel_BookSave($oBook)
    If @error <> 0 Then Return MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSave Example 1", "Error saving workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    ;MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSave Example 1", "Workbook has been successfully saved as '" & @TempDir & "\LaNUV.xlsx'.")

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

    ;Excel schließen
    _Excel_Close($oExcel)
    If @error <> 0 Then Return MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Close Example 2", "Excel konnte nicht automatisch geschlossen werden." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Sleep(2000)
    Local $aProcesses = ProcessList("EXCEL.EXE")
    ;MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Close Example 2", "Function ended successfully." & @CRLF & @CRLF & $aProcesses[0][0] & " Excel instance(s) still running.")

    [/autoit]
  • Schaut gut aus :)