Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zelleninhalt in Excel rechts ausrichten (https://www.delphipraxis.net/53582-zelleninhalt-excel-rechts-ausrichten.html)

Chrischan 19. Sep 2005 14:22


Zelleninhalt in Excel rechts ausrichten
 
Liste der Anhänge anzeigen (Anzahl: 1)
HAllo,
ich möchte in meinem Programm den Zelleninhalt rechts ausrichten. Dazu bediene ich mich folgenden Codes:


Delphi-Quellcode:
Worksheet.Range['E4', 'E4'].EntireColumn.HorizontalAlignment := xlHAlignRight;
Worksheet.Range['F4', 'F4'].EntireColumn.HorizontalAlignment := xlHAlignRight;
mit Worksheet : OleVariant;


hab es bei meinem freund so compiliert und alles hat funktioniert. jetzt will ich es bei mir einbinden und es kommt folgender fehler, wenn ich auf die routine zugreife, also erst während des programmlaufs:

EOleException: Die HorizontalAlignment-Eigenschaft des Range Objekts kann nicht festgelegt werden.



Wo liegt der Fehler?

marabu 19. Sep 2005 15:09

Re: Zelleninhalt in Excel rechts ausrichten
 
Hi Chrischan,

herzlich willkommen in der Delphi-PRAXiS.

Ich kann es gerade nicht überprüfen, aber hast du es vielleicht schonmal so probiert:

Delphi-Quellcode:
WorkSheet.Columns(5).HorizontalAlignment := xlRight;
Grüße vom marabu

Turbo78 5. Nov 2017 17:00

AW: Zelleninhalt in Excel rechts ausrichten
 
Zitat:

Zitat von Chrischan (Beitrag 362701)
HAllo,
ich möchte in meinem Programm den Zelleninhalt rechts ausrichten. Dazu bediene ich mich folgenden Codes:


Delphi-Quellcode:
Worksheet.Range['E4', 'E4'].EntireColumn.HorizontalAlignment := xlHAlignRight;
Worksheet.Range['F4', 'F4'].EntireColumn.HorizontalAlignment := xlHAlignRight;
mit Worksheet : OleVariant;


hab es bei meinem freund so compiliert und alles hat funktioniert. jetzt will ich es bei mir einbinden und es kommt folgender fehler, wenn ich auf die routine zugreife, also erst während des programmlaufs:

EOleException: Die HorizontalAlignment-Eigenschaft des Range Objekts kann nicht festgelegt werden.



Wo liegt der Fehler?

Ich habe die gleiche Fehlermeldung bekommen.
Übrigens, die Fehlermeldung ist unabhängig davon wie man ein "Range" definiert - kommt auch wenn man nur eine Zelle selektiert.

Kennt jemand die Lösung.

Delphi Tokyo 10.2, Excel 2010

kompi 6. Nov 2017 09:15

AW: Zelleninhalt in Excel rechts ausrichten
 
Bei mir funktioniert diese Lösung mit Excel 2010, Tokyo 10.2 und Windows 10:

Delphi-Quellcode:
 
xlBottom             = -4107;
  xlCenter             = -4108;
  xlDistributed        = -4117;
  xlJustify            = -4130;
  xlTop                = -4160;
  xlLeft               = -4131;
  xlRight              = -4152;

function Texcel.selectrange(xfrom, yfrom, xto, yto : integer) : olevariant;
var
   ra : olevariant;
begin
  ra := fexcel.range[fexcel.cells[yfrom,xfrom],fexcel.cells[yto,xto]];
  result := ra.select;
end;

procedure Texcel.alignrange(xfrom: Integer; yfrom: Integer; xto: Integer; yto: Integer; xalign: Integer; yalign: Integer);
var
  ra : olevariant;
begin
  ra := selectrange(xfrom,yfrom,xto,yto);
  fexcel.selection.HorizontalAlignment := xalign;
  fexcel.selection.VerticalAlignment := yalign;
end;
Hierbei ist fexcel folgendermaßen deklariert:
Fexcel := createoleobject('Excel.Application');

xalign und yalign werden durch die obigen Konstanten gesetzt.

Gruß Kompi

Turbo78 20. Nov 2017 17:32

AW: Zelleninhalt in Excel rechts ausrichten
 
Zitat:

Zitat von kompi (Beitrag 1385305)
Bei mir funktioniert diese Lösung mit Excel 2010, Tokyo 10.2 und Windows 10:

Delphi-Quellcode:
 
xlBottom             = -4107;
  xlCenter             = -4108;
  xlDistributed        = -4117;
  xlJustify            = -4130;
  xlTop                = -4160;
  xlLeft               = -4131;
  xlRight              = -4152;

function Texcel.selectrange(xfrom, yfrom, xto, yto : integer) : olevariant;
var
   ra : olevariant;
begin
  ra := fexcel.range[fexcel.cells[yfrom,xfrom],fexcel.cells[yto,xto]];
  result := ra.select;
end;

procedure Texcel.alignrange(xfrom: Integer; yfrom: Integer; xto: Integer; yto: Integer; xalign: Integer; yalign: Integer);
var
  ra : olevariant;
begin
  ra := selectrange(xfrom,yfrom,xto,yto);
  fexcel.selection.HorizontalAlignment := xalign;
  fexcel.selection.VerticalAlignment := yalign;
end;
Hierbei ist fexcel folgendermaßen deklariert:
Fexcel := createoleobject('Excel.Application');

xalign und yalign werden durch die obigen Konstanten gesetzt.

Gruß Kompi

Vielen Dank, leider habe ich mich mit diesem Thema erst seit gestern wieder befassen können.
Das Problem bei mir ist die fehlende Deklarationsdatei für die EXCEL Konstanten (und Prozeduren). Diese (falschen) habe ich aus Delphi7 übernommen:
Code:
Delphi 7
  xlBottom      = $FFFFEFF5;
  xlCenter      = $FFFFEFF4;
  xlDistributed = $FFFFEFEB;
  xlJustify     = $FFFFEFDE;
  xlTop         = $FFFFEFC0;
  xlLeft        = $FFFFEFDD;
  xlRight       = $FFFFEFC8;

Tokyo 10.2
  xlBottom      = -4107;
  xlCenter      = -4108;
  xlDistributed = -4117;
  xlJustify     = -4130;
  xlTop         = -4160;
  xlLeft        = -4131;
  xlRight       = -4152;
Wenn ich also die Delphi 7 Konstante xlCenter durch -4108 ersetze, funktioniert es bei mir ohne die vorgeschlagene Änderung zu implementieren.

Code:
//    appExcel.Selection.HorizontalAlignment := xlCenter; // funktioniert nicht
    appExcel.Selection.HorizontalAlignment := -4108; // funktioniert
Also die Frage: wo sind die Konstanten (und die Prozeduren) in Tokyo 10.2 definiert?

Vielen Dank nochmals.

Gruß, Toni

kompi 21. Nov 2017 08:17

AW: Zelleninhalt in Excel rechts ausrichten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Turbo78,

der Codeausschnitt aus meinem letzten Posting entstammt einer Klasse, die ich für mich selber erstellt habe. In dieser Klasse wird Excel mittels COM aufgerufen (createoleobject). Die einzelnen Funktionen habe ich eigentlich nach dem Ergebnis des Excel - Makrorekorders in Delphi erstellt. So bin ich auch an die Konstanten gekommen, da die Werte beim Ausführen des Makros in Excel ja angezeigt werden können.

Diese Konstanten habe ich dann in der Unit, in der auch die Klasse enthalten ist, selber definiert.

Die in Delphi enthaltenen Com Server ( Installationspfad\OCX\Server) habe ich gar nicht benutzt.

Ich habe diese Unit mal angehängt. Ist sicherlich nichts besonderes, aber vielleicht hilft es ja weiter.

Gruß Kompi

Jakson 5. Mai 2020 16:21

AW: Zelleninhalt in Excel rechts ausrichten
 
Über diesen Fehler bin ich auch vor kurzen gestolpert:

Soviel ich das verstehe sind die zwei Ausdrücke $FFFFEFF5 und -4107 sind gleich sobald sie in einem DWord gespeichert werden;

Ich kann nicht genau sagen ab wann Excel die Änderung vorgenommen hat aber ab einer bestimmten Excel Version oder Update habe ich immer wieder diesen Fehler bekommen.
Ich habe ein Programm laufen das genau die alte Logik verwendet und seit Jahren im Einsatz ist.
Da das setzen der Ausrichtung in Try-Except Blöcken gesetzt ist wurde der Fehler auch lange nicht gefunden.

Vor der Änderung war es üblich die Konstante in einem DWord zu speichern und als TOleEnum an Excel zu senden:
Delphi-Quellcode:
SetHAlign_Center(Range:Variant);
var HAlign : DWord;
begin
 HAlign := $FFFFEFF5;
 Range.HorizontalAlignment := TOleEnum(HAlign);
end;
Irgendwann wurde die Logik auf 64Bit umgestellt und die Konvertierung funktionierte so nicht mehr.
Jetzt akzeptiert Excel nur mehr Integers:
Delphi-Quellcode:
SetHAlign_Center(Range:Variant);
var HAlign : Integer;
begin
 HAlign := -4107;
 Range.HorizontalAlignment := HAlign;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz