Daten von Website in Excel importieren

  • Hallo zusammen,

    manchmal versuche ich aus Interesse autodidaktisch ein bisschen mit AutoIT zu spielen. Leider komme ich aber selten zum Abschluss... da total unbegabt...

    Wenn jemand Lust und Zeit hat mir zu helfen, würde ich mich sehr freuen.
    Problemstellung:
    Daten von Website in vorgegebenes Excel importieren.
    Habe ein bisschen anhand der Example gebastelt, leider ohne Erfolg


    Problem 1:
    Die Daten werden erfolgreich von der Seite in ein Array exportiert, jedoch nicht nach Excel importiert.

    Problem 2:
    Die Daten sollten bestenfalls wie folgt in Excel formatiert werden:

    Mein bisheriger "Fortschritt":

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


    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)
    _IEQuit($oIE)
    _ArrayDisplay($array)
    Local $ID ;Deklarierung der Variable(n)
    Local $oExcel = _ExcelBookNew()
    Local $aArray [5][5] = [["Jahr", 1],["Monat", 2],["Tag", 3],["WRI", 4],["Wges", 5]]
    _ExcelWriteSheetFromArray($ID, $_excArray, $StartZeile, $StartSpalte, $BaseZ, $BaseS);($ID, $StartZeile, $StartSpalte, $_excArray, $Richtung, $Base)

  • Was ist der Rückgabewert von _ExcelWriteSheetFromArray bzw. welchen Wert hat @error nach dem Aufruf?

  • Dein Excelaufruf beinhaltet vieles und nichts...

    Der Aufruf zur Übergabe von $Array lautet:

    [autoit]

    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)

    [/autoit]


    Alles weitere könnte auch mit ein paar Formeln in Excel formatiert werden.

  • Hallo ihr zwei, vielen Dank für eure bisherige Rückmeldung.

    Leider bekomme ich die Übergabe nach Excel nicht hin.
    Excel geht zwar auf, bleibt aber komplett leer.

    Wenn ich mir das ArrayDisplay mal temporär einkommentiere, bekomme ich aber die Werte angezeigt.

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.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)
    _IEQuit($oIE)
    _ExcelBookNew (1)
    Local $array [5][5] = [["Jahr", 1],["Monat", 2],["Tag", 3],["WRI", 4],["Wges", 5]]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)

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

    ;_ArrayDisplay($array)

    [/autoit]

    Die Ausgabe lautet:
    "\Lanuv.au3" (16) : ==> Variable used without being declared.:
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)
    _ExcelWriteSheetFromArray(^ ERROR
    ->07:39:53 AutoIt3.exe ended.rc:1
    >Exit code: 1 Time: 1.620

  • Die Zeile muss lauten:

    [autoit]

    Local $oExcel = _ExcelBookNew(1)

    [/autoit]
  • Dann würde mich das Ergebnis auf meine Frage #2 interessieren!

    • Offizieller Beitrag

    Das hier funktioniert bei mir (Win7, 64 Bit, AutoIt 3.3.10.2) einwandfrei:

    [autoit]


    #include <Excel.au3>

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

    Local $oExcel = _ExcelBookNew(1)
    Local $array [5][5] = [["Jahr", 1],["Monat", 2],["Tag", 3],["WRI", 4],["Wges", 5]]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)

    [/autoit]
  • Bei mir leider nicht....

    Das hier ist mein gesamter Code:

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.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)
    _IEQuit($oIE)
    ;_ArrayDisplay($array)
    Local $oExcel = _ExcelBookNew(1)
    Local $array [5][5] = [["Jahr", 1],["Monat", 2],["Tag", 3],["WRI", 4],["Wges", 5]]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)

    [/autoit]

    Im Log wird angezeigt:
    >"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\...\Lanuv.au3" /UserParams
    +>09:57:34 Starting AutoIt3Wrapper v.2.1.2.9 Environment(Language:0407 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X86)
    -> Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
    >Running:(3.3.10.2):C:\Program Files\AutoIt3\autoit3.exe "C:\Users\...\Lanuv.au3"
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    "C:\Users\...\Lanuv.au3" (31) : ==> Variable used without being declared.:
    _ExcelWriteSheetFromArray($oExcel, $aArray, 1, 1, 0, 0)
    _ExcelWriteSheetFromArray($oExcel, ^ ERROR
    ->09:57:49 AutoIt3.exe ended.rc:1
    >Exit code: 1 Time: 17.350

    Ist damit Frage2 beantwortet?

    Es geht dann ein Excel auf, welches aber nur die 5 Überschriften untereinander, statt nebeneinander anzeigt und die ganzen Werte des Arrays tauchen nirgends auf.

    Viele Grüße

  • Du überschreibst mit den Überchriften die Werte die Du aus dem Internet lädst.
    Beide Arrays sollten nicht den selben Namen ahben ;)

  • Zeile 9 und 13.

  • Neues Spiel, neues Glück

    [autoit]

    ;Dennis Binia Trimet Aluminuium

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

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.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)
    _IEQuit($oIE)
    ;Local $sString = StringReplace("", ".", ",")
    ;_ArrayDisplay($array)
    Local $oExcel = _ExcelBookNew(1)
    Local $sFormat = "'##.# '0,00"
    _ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    Local $array1 [5][5] = [["Jahr", 1],["Monat", 2],["Tag", 3],["WRI", 4],["Wges", 5]]
    _ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)

    [/autoit]

    Die Daten werden jetzt wunderschön nach Excel exportiert - Juhuu -> Vielen Dank :thumbup:
    Nun also die sich dadurch ergebenen Probleme:
    - Die Spaltenüberschriften werden nicht übernommen
    - Excel formatiert den Wert 9.5 zwangsläufig in ein Datum, d.h entweder "suchen&ersetzen direkt im Array (Punkt durch komma) oder die Formatierung der Zellen als Text.
    Beides wollte mir bisher noch nicht gelingen

  • Wo sollen die Spaltenüberschriften stehen? Ich nehme mal an, dass das genau eine Zeile ist?
    "Jahr", "Monat", "Tag", "WRI", "Wges" in die Zellen A1 bis E1?

  • Etwa so?

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.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)
    _IEQuit($oIE)
    Local $oExcel = _ExcelBookNew(1)
    Local $sFormat = "'##.# '0,00"
    _ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    Local $array1[5] = ["Jahr", "Monat", "Tag", "WRI", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 2, 1, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

    [/autoit]
  • Wenn Du noch viel im Excel "rumfunktionieren" musst, dann ist die Frage, ob Du nicht gleich auf die neue Version der Excel UDF umsteigst. Sie ist zwar derzeit noch im Beta Stadium, ich möchte sie aber bald in den Entwicklerzweig von AutoIt laden. Wenn alles klappt, ersetzt sie dann in der nächsten Beta- und Produktionsversion die bestehende Excel UDF.

  • Wieder ein kleiner Schritt mehr...

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.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]

    ;_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"
    _ExcelNumberFormat($oExcel, $sFormat, 5, 2, 0, 11)
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WRI", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 2, 1, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

    [/autoit]
  • [autoit]

    #include <MsgBoxConstants.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]

    ;_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)
    Local $array1[6] = ["Jahr", "Monat", "Tag", "Stunde", "WRI", "Wges"]
    _ExcelWriteSheetFromArray($oExcel, $Array, 2, 1, 0, 0)
    _ExcelWriteArray($oExcel, 1, 1, $Array1, 0)

    [/autoit]

    Jetzt formatiert der Kollege wenigstens schonmal eine Zelle ins Textformat. Wie bringe ich ihm bei das für die ganze Spalte zu tun...?