OLE Automation - Probleme mit "End" in Excel

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Retterman
Beiträge: 3
Registriert: Mo 19. Okt 2015, 17:19

OLE Automation - Probleme mit "End" in Excel

Beitrag von Retterman »

Hallo Experten,

nachdem ich jahrelang nur lesend dabei war, muss ich jetzt auch mal eine Frage stellen, bei der ich selber nicht weiterkomme.

Bei der Konvertierung eines alten Delphi-Programms nach Lazarus bin ich bei der folgenden Delphi-Anweisung ins Stolpern gekommen:

Code: Alles auswählen

  if false then Excel.Selection.Begin;
  Excel.Selection.End[xlUp].Select;
Das ursprüngliche Programm war in Delphi 7 geschrieben, die Umsetzung soll nach Lazarus 2.2.6 unter Windows 10 Pro sein. "Excel" in den beschriebenen Zeilen ist natürlich ein OleVariant, das Worksheet zu öffnen und zu bearbeiten ist ansonsten kein Problem.

Zu den Zeilen muss ich ein paar Details erklären. In der zweiten Zeile wird ab der selektierten leeren Excel-Zelle nach oben hin (xlUp) die erste gefüllte Zelle gesucht; das ist ganz normaler VBA- bzw. OLE-Code. Delphi meckerte jedoch darin das "End" an. Um den Compiler (oder eher den Parser) zu überlisten, dient die erste Zeile mit dem "Begin". Damit stimmt die Paarung der "Begin"s und "End"s wieder. Eine programmtechnische Wirkung hat die erste Zeile wegen dem "if false..." sowieso nicht und wird vermutlich gleich wegoptimiert.

Delphi (zumindest Delphi 7) hat sich damit tatsächlich überlisten lassen. Lazarus macht da aber nicht mit. Kennt jemand eine Möglichkeit, so eine Anweisung trotzdem durchzuführen? Oder kennt jemand eine andere Möglichkeit, um die erste belegte Zelle zu finden? Die Zellen der Reihe nach zu überprüfen wäre natürlich ein Weg, aber der umständlichste und vor allem der langsamste Weg. Excel ist da nicht gerade schnell.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: OLE Automation - Probleme mit "End" in Excel

Beitrag von m.fuchs »

Probier mal ob es so geht:

Code: Alles auswählen

  Excel.Selection.&End[xlUp].Select;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Retterman
Beiträge: 3
Registriert: Mo 19. Okt 2015, 17:19

Re: OLE Automation - Probleme mit "End" in Excel

Beitrag von Retterman »

Kurz ausprobiert, und - ES KLAPPT! :D

Vielen Dank für die Hilfe, du bist für mich der Held des Tages! Mir ist zwar nicht klar, was das "&" hier bedeutet, aber dass es funktioniert, reicht mir für den Moment schon. "Jugend forscht" kommt danach. :wink:

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: OLE Automation - Probleme mit "End" in Excel

Beitrag von m.fuchs »

Super, war mir nicht ganz sicher ob es an dieser Stelle auch klappt.

Freepascal hat einige neue reservierte Wörter, die in Turbo Pascal noch als eigene Bezeichner erlaubt waren.
Damit man mit altem Code weiterarbeiten kann, soll man den entsprechenden Bezeichnern ein & voranstellen.

https://wiki.freepascal.org/%26#identifier_escape
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Retterman
Beiträge: 3
Registriert: Mo 19. Okt 2015, 17:19

Re: OLE Automation - Probleme mit "End" in Excel

Beitrag von Retterman »

Wieder was dazugelernt :) . Vielen Dank für die Aufklärung. Mein erster Gedanke war der Adressoperator von C, aber das ist ja eine ganz andere Baustelle.

Antworten