Excel Zeileninhaltzähler

  • Hallo,

    ich versuche gerade aus einer xls Datei zu bestimmen, wieviele Zeilen belegt sind (in Spalte 1).
    Leider wird mein Skript soweit gestartet aber es öffnet nur die Datei. Es gibt auch keine Fehlermeldung sondern es funktioniert einfach nicht. Ich poste mal hier meinen Quelltext, vielleicht könnt ihr mir ja sagen warum es nich funktioniert. ?(

    [autoit]

    #include <Excel.au3>

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

    ;~ Dateipfad auf Variable speichern
    $Speicherort = @ScriptDir & "\37.xls"
    ;~Datei am Speicherort sichtbar und auch als beschreibbar öffnen
    $oExcel = _ExcelBookOpen(""& $Speicherort)
    WinWaitActive("Microsoft Excel - 37.xls","1",False)

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

    ;~Zähle die Anzahl der Zeileninhalte
    Do
    $anzahl = $anzahl + 1
    $Zeileninhalt = _ExcelReadCell($oExcel, $anzahl , "1")
    Until $Zeileninhalt <> ""
    MsgBox(1,"Belegte Spalten","Es sind" & $anzahl "Spalten belegt")
    Exit

    [/autoit]

    Einmal editiert, zuletzt von autoitinstallermaker (29. März 2010 um 10:39)

  • Hallo autoitinstallermaker.

    ich habe zwar kein Excel installiert, aber so sollte es klappen:

    [autoit]

    #include <Excel.au3>

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

    ;~ Dateipfad auf Variable speichern
    $Speicherort = @ScriptDir & "\37.xls"
    ;~Datei am Speicherort sichtbar und auch als beschreibbar öffnen
    $oExcel = _ExcelBookOpen(""& $Speicherort)
    WinWaitActive("Microsoft Excel - 37.xls","1",False)

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

    ;~Zähle die Anzahl der Zeileninhalte
    Do
    $anzahl = $anzahl + 1
    $Zeileninhalt = _ExcelReadCell($oExcel, $anzahl , 1)
    ConsoleWrite($Zeileninhalt & @crlf) ;Ausgabe des Zellinhaltes zur Kontrolle
    Until $Zeileninhalt <> ""
    MsgBox(1,"Belegte Spalten","Es sind" & $anzahl "Spalten belegt") ;müsste Zeilen heissen
    Exit

    [/autoit]

    mfg (Auto)Bert

  • Hi,

    Dein Code kann so nicht laufen. Code angepasst, sollte so funktionieren:

    [autoit]


    #include <Excel.au3>

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

    ;~ Dateipfad auf Variable speichern
    $Speicherort = @ScriptDir & "\37.xls"
    ;~Datei am Speicherort sichtbar und auch als beschreibbar öffnen
    $oExcel = _ExcelBookOpen($Speicherort)
    ;WinWaitActive("Microsoft Excel - 37.xls","1",False)
    $anzahl = 0
    ;~Zähle die Anzahl der Zeileninhalte
    Do
    $anzahl = $anzahl + 1
    $Zeileninhalt = _ExcelReadCell($oExcel, $anzahl , 1)
    Until $Zeileninhalt <> ""
    MsgBox(1,"Belegte Spalten","Es sind" & $anzahl - 1 & "Spalten belegt")

    [/autoit]

    ;-))
    Stefan

    • Offizieller Beitrag

    Das ist aber unnütz kompliziert ;)

    Geht ganz einfach:

    [autoit]

    ; === Excel Objekt erstellen
    Local $oBook = _ExcelBookOpen($file)

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

    ; === Tabellenblatt wählen ( wobei das glaub ich für diese Funktionen nicht notwendig ist )
    $oBook.ActiveWorkbook.Sheets(1).Select ()

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

    ; === letzte Zeile
    ConsoleWrite('Anzahl Zeilen: ' & $oBook.Worksheets(1).UsedRange.Rows.Count & @CRLF)

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

    ; === letzte Spalte
    ConsoleWrite('Anzahl Spalten: ' & $oBook.Worksheets(1).UsedRange.Columns.Count & @CRLF)

    [/autoit]
  • Danke für die schnelle Hilfe!!!
    Ich post ehier mal den Quelltext wie ich ihn verwendet habe.

    [autoit]

    #include <Excel.au3>

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

    ;~ Dateipfad auf Variable speichern
    $Speicherort = @ScriptDir & "\37.xls"
    ;~Datei am Speicherort sichtbar und auch als beschreibbar öffnen
    $oExcel = _ExcelBookOpen($Speicherort)
    ;WinWaitActive("Microsoft Excel - 37.xls","1",False)
    $anzahl = 0
    ;~Zähle die Anzahl der Zeileninhalte
    Do
    $anzahl = $anzahl + 1
    $Zeileninhalt = _ExcelReadCell($oExcel, $anzahl , 1)
    Until $Zeileninhalt = ""
    MsgBox(1,"Belegte Spalten","Es sind" & $anzahl - 1 & "Zeilen belegt")

    [/autoit]
    • Offizieller Beitrag

    BugFix & Oscar:
    Liefern Eure Ansätze die Belegung in der 1. ten Spalte (wie gefragt)?
    Ich glaube nein.


    Ich glaube doch. :D
    OK, muß man etwas anpassen. Aber es ist immer günstiger die Excel-internen Funktionen zu nutzen. ;)

    [autoit]

    Local $oBook = _ExcelBookOpen('c:\Test.xls', 0)
    Local $ZelleLeer = $oBook.Sheets(1).UsedRange.Find('')
    ConsoleWrite('Belegte Zellen in Spalte A: ' & StringRegExpReplace($ZelleLeer.Address, '\$\w\$', '')-1 & @CRLF)
    _ExcelBookClose($oBook)

    [/autoit]

    Noch eine Anmerkung: In der Form klappt das aber nur, wenn die Nachbarspalten durchgängig belegt sind. Ansonsten wird die erste freie Zelle zurückgegeben.
    Suchweise: von links nach rechts und abwärts.