Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wordautomation Zeilenabstand einstellen (https://www.delphipraxis.net/208260-wordautomation-zeilenabstand-einstellen.html)

Alfredo 5. Jul 2021 16:53


Wordautomation Zeilenabstand einstellen
 
Delphi-Quellcode:

Var
oWord1: OLEVariant;
oDocument: OLEVariant;
oRange: OLEVariant;

begin
  try
    oWord1 := CreateOleObject('Word.Application');
    oWord1.Visible := True;
    oDocument := oWord1.Documents.Add();
    oRange := oDocument.Range();
    oRange.Font.Name := 'Courier New';
    oRange.Font.Size := 8;
 
    oRange.Text := 'Text1' + chr(13);
    oRange.Move(wdstory);

    oRange.Text := "Text2" + chr(13);
    oRange.Movew(wdStory);
  finally
  end;
end;
Der Zeilenabstand zu Text2 ist leider größer als nächste Zeile.

Andreas13 5. Jul 2021 18:21

AW: Wordautomation Zeilenabstand einstellen
 
Hallo Alfredo,
Du kannst Deinen Quellcode etwas übersichtlicher formatieren, wenn Du das Delphi-Symbol (= gelber Helm mit dem roten Kamm) vom Menü direkt über dem Editorfenster benutzt. Oder für neutrale Fälle als einfachen Code mit dem Symbol gleich links daneben (= auf weißem Blatt blaue eckige Klammern <>). Das geht auch nachträglich. :wink:

Gruß, Andreas

mmw 5. Jul 2021 18:50

AW: Wordautomation Zeilenabstand einstellen
 
hallo,
das sollte hiermit funktionieren.

https://docs.microsoft.com/de-de/off...inespacingrule

Gruß

Jumpy 6. Jul 2021 08:22

AW: Wordautomation Zeilenabstand einstellen
 
Evtl. wäre es auch etwas Word-Konformer, wenn man anstatt mit CHR(13) usw. zu arbeiten, Paragraphs.Add benutzt.

Alfredo 6. Jul 2021 09:26

AW: Wordautomation Zeilenabstand einstellen
 
Vielen Dank für eure Hinweise:

Die Lösung ist, dass chr(13) einen harten Zeilenumbruch vornimmt.

Für mein Problem ist jedoch ein weicher Zeilenumbruch([Enter]+Shift) = Chr(11) notwendig.

In der Delphi-Praxis steht die Lösung bereits unter "OLE Word Zeilenumbruch". :(

Gibt es denn für chr(11) auch etwas dass Word-Konform ist?
Mein altes Automationshandbuch für VFP hat mir "Paragraphs.Add" einfach unterschlagen.

Jumpy 6. Jul 2021 10:40

AW: Wordautomation Zeilenabstand einstellen
 
Zitat:

Zitat von Alfredo (Beitrag 1491930)
Gibt es denn für chr(11) auch etwas dass Word-Konform ist?
Mein altes Automationshandbuch für VFP hat mir "Paragraphs.Add" einfach unterschlagen.

ActiveDocument.Paragraphs(1).Range.InsertBreak wdLineBreak

Wobei + CHR(11) schon einfacher ist :-D

Alfredo 7. Jul 2021 07:53

AW: Wordautomation Zeilenabstand einstellen
 
Beim Testen ist mir aufgefallen, dass der Compiler keine Fehler meldet,
aber zur Laufzeit Fehler in der Codierung des Word-Objektes festgestellt
werden.

Kann man den Compiler dazu bringen, dass er diese Fehler beanstandet?

Lemmy 7. Jul 2021 08:21

AW: Wordautomation Zeilenabstand einstellen
 
nicht bei der späten Bindung. Damit der Compiler meckert musst Du die frühe Bindung machen, d.h. die TLB in eine pas umwandeln und diese einbinden und verwenden.

Alfredo 7. Jul 2021 11:02

AW: Wordautomation Zeilenabstand einstellen
 
Hallo Lemmy,

in meiner Form steht in der uses comobj.

Die comobj ist m.E. bereits eine pas.

Was übersehe ich?

Gruß
Alfred

Lemmy 7. Jul 2021 16:37

AW: Wordautomation Zeilenabstand einstellen
 
alles was du in Delphi einbindest dürfte ne pas sein - zumindest wenn Sourcen drin stehen.

Du sollst über Delphi Menü Komponente - Komponente importieren - Typbibliothek importieren: in der Liste dann Microsoft Word suchen und auswählen. Dazu muss Word natürlich importiert sein. Auf der nächsten Seite die "Palette" nicht definieren, ebenso wenig "Komponenten Wrapper erstellen" auswählen. Nochmal "Weiter" und "Unit anlegen" und Fertigstellen.

Die Unit kannst Du dann einbinden und die Klasse TWordApplication (oder wie immer die dann auch heißt) "normal" wie jede andere Klasse in Delphi nutzen.

Nachteil dieser Art ist aber, dass dein Programm dann ohne installiertes MS Word mit aktiver OLE-Schnittstelle nicht mehr laufen wird.

Die comobj enhält "lediglich" die notwendigen Sourcen um mit COM zu arbeiten

mmw 7. Jul 2021 17:56

AW: Wordautomation Zeilenabstand einstellen
 
hallo,
als Beispiel

Delphi-Quellcode:
procedure TForm50.Button1Click(Sender: TObject);

var myword:word_tlb._application;
    mydocument,
    myvisible,
    mysavechanges,
    mytemplate,
    newtemplate,
    mydokumenttype,
    myorginalformat,
    myRouteDocument:Olevariant;

begin

  myword:=Word_TLB.CoWordApplication.Create;

  mytemplate:='Normal';
  newtemplate:=False;
  mydokumenttype:=wdNewBlankDocument;
  myvisible:=True;

  mysavechanges:=wdDoNotSaveChanges;
  myorginalformat:=wdOriginalDocumentFormat;
  myRouteDocument:=False;

  try

   myword.Documents.Add(mytemplate,newtemplate,mydokumenttype,myvisible);

   myword.Visible:=True;


   // myword.Quit(mysavechanges,myorginalformat,myRouteDocument);

  except

  end;
end;

hier ist eine gute Erklärung


[URL="https://www.delphi-treff.de/tipps-tricks/comoledde/andere-office-anwendungen/excel-mit-ole-automation-steuern/"]https://www.delphi-treff.de/tipps-tricks/comoledde/andere-office-anwendungen/excel-mit-ole-automation-steuern/[/URL]


Gruß

Alfredo 8. Jul 2021 12:38

AW: Wordautomation Zeilenabstand einstellen
 
Hallo Lemmy vielen Dank für die Infos.

Es hat etwas gedauert, bis ich dcloffice2010270.bpl in \21\bin\ gefunden hatte.

Gruß
Alfred

Alfredo 8. Jul 2021 12:53

AW: Wordautomation Zeilenabstand einstellen
 
Hallo mmw,

ich habe den Beispiel etwas abgeändert, damit es bei mir läuft.

Delphi-Quellcode:
procedure TForm2.Button1.click(Sender: TOjekt);
Var
   mytemplate: OleVariant;
   myvisible: OleVariant;
   newtemplate: OleVariant;
   mydokumenttype: OleVariant;

begin

  mytemplate := 'Normal';
  newtemplate := False;
  mydokumenttype := wdNewBlankDocument;
  myvisible := True;
 
  myword.connect;
  myword.Visible := True;
  myword.Documents.Add(mytemplate,newtemplate,mydokumenttype,myvisible);
  myword.Selection.Font.Name := 'Courier New';
  myword.Selection.Font.Size := 10;
  myword.Selection.Font.Bold := 1;
  myword.Selection.TypeText('Hello World');

end;
Wo könnte ich denn auf Querdruck umstellen?

Gruß
Alfred

Andreas13 8. Jul 2021 13:18

AW: Wordautomation Zeilenabstand einstellen
 
Zitat:

Zitat von Alfredo (Beitrag 1492032)
.. Es hat etwas gedauert, bis ich dcloffice2010270.bpl in \21\bin\ gefunden hatte.

Hallo Alfredo,
Du kannst "verschollene" Dateien auf Festplatten/USB-Sticks etc. am schnellsten mit Everything.exe https://www.voidtools.com/ aufspüren.
Gruß, Andreas

Alfredo 8. Jul 2021 16:02

AW: Wordautomation Zeilenabstand einstellen
 
Hallo mmw,

ich hab den Querdruck gefunden:

Delphi-Quellcode:

myword.Selection.PageSetup.Orientation := 1;

mmw 8. Jul 2021 16:15

AW: Wordautomation Zeilenabstand einstellen
 
Hallo,

für mein Beispiel muss man die Typbibliothek erstellen und einbinden.

Haupsache es funktioniert.

Gruß

Alfredo 9. Jul 2021 08:36

AW: Wordautomation Zeilenabstand einstellen
 
Hallo mmw,

ich habe die Ursache gefunden warum es bei mir funkioniert.

Wenn in der Delphi-Komponenten-Palette "Serverkomponenten" die Komponente "TWordApplication"
existiert, ist die Typbiliothek bereits installiert.

In WordApplikation1 habe ich den Namen auf myword geändert und konnte deshalb Deinen
Programmcode weiter verwenden.

Gruß
Alfred


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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