Anzahl gefüllter Zeilen einer Spalte bekommen in Excel (Möglichst Effizient und schnell)

  • Hallo,

    Ich möchte herausfinden wie viele Zeilen in einer bestimmten Spalte (A) gefüllt sind.

    Ich habe bereits 2 Methoden ausfindig machen können, die leider viel Rechenaufwand benötigen.
    "_ExcelReadArray" und "_ExcelReadCell"

    Damit dauert es leider sehr lange eine über 1000 zeilige Spalte einzulesen und mit einer Schleife zu prüfen wann die Zeile(n) leer ist / sind. Zumal eine leere Zeile kein eindeutiger Indiz für das Ende eines Excel-Dokuments ist. Es kann durchaus passieren dass mal 1-2 Abstandszeilen vorkommen.

    Ich brauche eine Funktion die mir sagt wo die letzte beschriebene Zeile im Excel Dokument der Spalte A ist. Also wäre ein rückwärts Einlesen sicher kein schlechter Ansatz.

    Aber wenn ich mit ExcelReadCell bei z.B. 10000 Rückwärts anfange und checke wann die erste Zeile geschrieben ist, kann das schonml 5 Minuten dauern.

    Hat da jemand eine Idee wie man an die Sache herangeht?

    Danke

    2 Mal editiert, zuletzt von KloMeister (27. Februar 2015 um 13:28)

  • Das gibst Du genau so in AutoIt ein.

    Local $oAppl = _Excel_Open()
    Local $oWorkbook = _Excel_BookOpen($oAppl, "DeinPfad\DeineDatei.xlsx")

    Local $nLastRow = $oWorkbook.Sheets(2).Cells($oWorkbook.Sheets(2).Rows.Count, 3).End(-4162).Row
    ; Du mußt nur die bedien "2er" durch die Nr. Deines Excel-Sheets und die "3" durch die Nr. Deiner Excel-Spalte ersetzen
    ....
    _Excel_BookClose($oWorkbook)
    _Excel_Close()

  • Keine Ahnung welche AutoIt Version du hast bzw. mit welchen Include Files du arbeitest, aber bei mir gibt es nichtmal den Befehl " _Excel_Open()"

    Davon steht auch nichts in der Help Datei.

    Es gibt bei mir "_ExcelBookOpen" oder "_ExcelBookAttach"


    Edit: Habe mal nachgeschaut. Anscheinend wurde im letzten Jahr enorm an den Excel-Funktionen gearbeitet. Meine Version war schon 1 Jahr alt. Jetzt habe ich ein Problem, weil alle meine Funktionen auf die alten UDFs abgestimmt waren.

    Edit2: Ich habe auch mal versucht den Code kompatibel zu bekommen, aber mein 550 Zeilen Code lässt sich da nicht so einfach anpassen. Besonders Befehle wie "_ExcelReadCell" und "_ExcelWriteCell" wurden herausgenommen und durch die Range-Befehle ersetzt. Leider ist der Befehlaufbau nicht gleich, so das ein Replace ausgeschlossen ist. Man müsste da wieder Gehirngrips reinstecken und alles durchgehen...

    Mir wäre es dann lieber das Projekt mit den alten Includes fertigzustellen. Falls es auch da eine Möglichkeit gibt die Zeilen zu bekommen, würde ich diese Variante vorziehen.

    Zu sagen ist noch, dass ich das Excel Dokument über "_ExcelBookAttach" in neuer Version "_Excel_BookAttach" anbinde,

    4 Mal editiert, zuletzt von KloMeister (27. Februar 2015 um 14:42)

  • So klappt alles (mit der alten Version)

    Danke

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

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

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

    Local $oExcel = _ExcelBookAttach("Unit Tracking .xlsx", "FileName")
    Local $test = $oExcel.ActiveSheet.Cells($oExcel.ActiveSheet.Rows.Count, 1).End(-4162).Row
    msgbox(0,"",$test)

    [/autoit]