Entwickler-Ecke

Dateizugriff - Excel Rows.Count !?! Zeilen Zählen


PreMarT - Fr 11.12.09 12:07
Titel: Excel Rows.Count !?! Zeilen Zählen
Hallo alle zusammen,

hab da mal wieder ein kleinen Problem.

Und zwar möchte ich das Ende meiner Xls Datei herausfinden also nach welcher Zeile nix mehr kommt, ich hab es mit Rows.Count probiert aber da gibt der mit 65536 aus also die Max Zeilen eines Sheets...
Wenn man in Excel mit dem Scrollbar runter fährt bleibt er ja bei der letzten Zeile stehen, wenn man nciht mit PageDown oder den Pfeiltasten weiter runter fährt...Diese Zeile brauch ich

Hat jemand ne Idee?

bin für jeden Vorschlag dankbar :)

mfg

PMT


Andreas Schilling - Fr 11.12.09 13:05

Zeilenzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row


PreMarT - Fr 11.12.09 14:12

Also falls ich falsch verstanden wurde^^ denn der Code geht irgendwie nciht und verstehen tu ich ihn noch weniger :/

hab im moment


Delphi-Quelltext
1:
MaxZeilen := XLSheet.Rows.Count //--> da bekomm ich 65536 oder sowas raus...                    


brauch jetzt nen Befehl wo ich die Zeilenanzahl bekomm nach der nichts mehr kommt...

mfg


Xentar - Fr 11.12.09 14:46

user profile iconPreMarT hat folgendes geschrieben Zum zitierten Posting springen:
denn der Code geht irgendwie nciht

Wie war noch gleich die Fehlermeldung?


Andreas Schilling - Fr 11.12.09 14:51

Ok, das ist die Variante für Makros in Excel selber gewesen.

Delphi-Quelltext
1:
  MaxZeilen := XLSheet.Cells(Rows.Count, 1).End(xlUp).Row;                    


Normalerweise kann man es fast 1:1 in Delphi verwenden. Eventuell noch etwas rumexperimentieren.


PreMarT - Fr 11.12.09 15:06

wenn ich den Code so übernehme kommt Operator oder Simikolon fehlt...
wenn ichd en code etwas umschreibe kommen sehr skurile fehler


Xentar - Fr 11.12.09 15:16

"skurrile Fehler", tolle Aussage..
Poste doch mal den Code, wie du ihn "etwas verändert" hast, und welcher "skurile Fehler" dabei kommt.


PreMarT - Fr 11.12.09 15:25


Delphi-Quelltext
1:
2:
3:
4:
5:
iMaxZeilen := XLSheet.Cells(Rows.Count, 1).End(xlUp).Row; //  Operator oder Semikolon fehlt

iMaxZeilen := XLSheet.Cells.Rows.Count.End(xlUp).Row; //  Record, Objekt oder Klassentyp erforderlich

iMaxZeilen := XLSheet.Cells.Item[XLSheet.Rows.Count, 1].End(xlUp).Row; // Exception: 'Mitglied nicht gefunden'


Das Problem ist ist weis nicht wie ich den Code ändern soll...und was jetzt der post bringen soll weis ich net...entweder man weis wie es geht und kann mir helfen oder man weis es nicht dann brauch ich auch nix zu posten...
Versteh ja nciht mal den Code der gepostet wurde... :/ wie soll cih den dann umschreiben?


JoelH - Fr 11.12.09 15:54

user profile iconPreMarT hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
iMaxZeilen := XLSheet.Cells(Rows.Count, 1).End(xlUp).Row; //  Operator oder Semikolon fehlt

iMaxZeilen := XLSheet.Cells.Rows.Count.End(xlUp).Row; //  Record, Objekt oder Klassentyp erforderlich

iMaxZeilen := XLSheet.Cells.Item[XLSheet.Rows.Count, 1].End(xlUp).Row; // Exception: 'Mitglied nicht gefunden'


Das Problem ist ist weis nicht wie ich den Code ändern soll...und was jetzt der post bringen soll weis ich net...entweder man weis wie es geht und kann mir helfen oder man weis es nicht dann brauch ich auch nix zu posten...
Versteh ja nciht mal den Code der gepostet wurde... :/ wie soll cih den dann umschreiben?


Mal nicht soviel Panik machen. Wenn du schreibst was du für Fehler bei welchen Versuchen bekommst dann kann man damit arbeiten. Mit einem Posting wie

Zitat:

wenn ich den Code so übernehme kommt Operator oder Simikolon fehlt...
wenn ichd en code etwas umschreibe kommen sehr skurile fehler


dagegen nicht. Was für dich skurile Fehler sind, sind für andere Programmierer eventuell nützliche Hinweise.

PS: Probier mal

Delphi-Quelltext
1:
    iMaxZeilen := app_Excel.workbooks[1].sheets[1].Cells[app_Excel.workbooks[1].sheets[1].Rows.Count, 1].End[xlUp].Row;                    


das sollte gehen. Meist sind es die runden Klammern die Delphi nicht so mag , Delphi mags lieber eckig ;)

und zur Info

Delphi-Quelltext
1:
var app_excel : Variant;                    


weiss ja nicht von was dein Typ XLSheet ist, hast du ja leider nicht dazugepostet.

und noch was xlUp ist einen Integerkonstante!


Delphi-Quelltext
1:
xlUp = -4162;                    


PreMarT - Fr 11.12.09 16:00

@Andreas Schilling

Danke für den Code :)

@JoelH

Danke für die Übersetzung sowie Nachhilfe :)

Es funktioniert... aber ich weis leider immernoch nicht ganz wie der Code zusatande kommt...

wenn es vielleicht noch wer kommentieren mag :)

ansonsten geb ich mich acuh mit dem Ergebnis zu frieden..

Danke nochmal

mfg

PMT


JoelH - Fr 11.12.09 16:21

Also wenn du bei Excel etwas automatisieren willst, dann bietet sich folgende Vorgehensweise an. Du startet Excel und wählst Extras/Makros/Aufzeichnen.

Dann machst du dann was dein Makro für dich machen soll. Danach beendest du die Aufzeichnung und schaust was im Erzeugten Makro steht. Das kann man dann relativ 1:1, mit ein paar Einschränkungen, einfach nach Delphi transferieren und fertig ist die Fernsteuerung.


Dein Code hier geht IMHO (bin nicht ganz sicher ;) ) hin und geht runter bis zur letzten Tabellenzeile. Das macht dieser Teil

Cells(Rows.Count, 1)

dann simuliert er ein STRG-Pfeil nach Oben. Das sollte der Teil End(xlUp) sein. und das Row gibt wohl dann die entsprechende Ziele zurück auf der du dann stehst.

Aber das kann die Andreas Schilling wahrscheinlich besser erläutern, also kein Gewähr auf das was ich geschrieben habe, ich hab das nur anhand des Codes geschlussfolgert.


PreMarT - Mo 11.01.10 14:44

Jetzt nach paar Wochen musste ich feststellen das die Lösung doch nciht ganz Wasserdicht war, hab mal ein bisschen rumprobiert und einen 100% sauberen Befehl gefunden.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
// erstes WorkBook auswählen
XLBk := XLApp.WorkBooks.Item[1];
// erstes WorkSheet definieren
XLSheet := XLBk.WorkSheets.Get_Item(1as _Worksheet;

F_iMaxZeilen:= XLSheet.Cells.Item[1,1].SpecialCells[xlLastCell].Row ;
F_iMaxSpalten:= XLSheet.Cells.Item[1,1].SpecialCells[xlLastCell].Column ;


MFG

BG