Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert (https://www.delphipraxis.net/212389-word-ole-zwei-dokumente-zusammenfuegen-schriftart-wird-veraendert.html)

rdeutsch 2. Feb 2023 14:44

Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Tag

Mit diesem Code werden zwei Dokumente via Word-OLE zusammengefügt.
Delphi-Quellcode:

  WordApplication: TWordApplication;
  WordDocument: TWordDocument;

var Mischfile: olevariant;
begin
  // Dokument, welches angehängt werden soll
  if rgTypDokument.ItemIndex = 0 then
    Mischfile := docPfad+'Anhang_Text.doc'
  else
    Mischfile := docPfad+'Anhang_Tabelle.doc';

  WordApplication.Connect;
  WordApplication.Documents.Add(docPfad+'Hauptdokument.doc', EmptyParam, EmptyParam, EmptyParam);
  WordDocument.ConnectTo(WordApplication.ActiveDocument);
  WordApplication.visible := true;
  WordApplication.Selection.EndKey(wdStory,EmptyParam);
  WordApplication.Selection.InsertFile(Mischfile, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
Nach dem Zusammenfügen ist im Inhalt vom 2. Dokument (Anhang) aber leider eine andere Schriftart vorhanden. D.h. ab der 2.Zeile ist nicht mehr die Schriftart "Arial" und Grösse 10, sondern "Times New Roman" und Grösse 12.
Das Gleiche passiert auch, wenn Anhang mit einer Tabelle eingefügt wird.

Anhang 55797
Der blaue Strich markiert das Hauptdokument (Hauptdokument.doc), der orange Strich den Anhang (Anhang_Text.doc).

Wie kann man verhindern, dass Word beim InsertFile den Inhalt bei der Schrift verändert?
Oder gibt es eine bessere Art zwei Dokumente in Word via OLE zusammenzufügen?

Im Anhang ist ein kleines Demoprogramm inkl. Code, welches das Problem aufzeigt.

Danke für jede Hilfe und Gruss,
Robert

Delphi.Narium 2. Feb 2023 16:21

AW: Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Delphi-Quellcode:
  WordApplication: TWordApplication;
  WordDocument: TWordDocument;

var
  Mischfile: olevariant;
  vParam  : OleVariant;
begin
  // Dokument, welches angehängt werden soll
  if rgTypDokument.ItemIndex = 0 then
    Mischfile := docPfad+'Anhang_Text.doc'
  else
    Mischfile := docPfad+'Anhang_Tabelle.doc';

  WordApplication.Connect;
  WordApplication.Documents.Add(docPfad+'Hauptdokument.doc', EmptyParam, EmptyParam, EmptyParam);
  WordDocument.ConnectTo(WordApplication.ActiveDocument);
  WordApplication.visible := true;
  WordApplication.Selection.EndKey(wdStory,EmptyParam);
// ******
  vParam := 'Standard'; // ggfls. den Namen einer geeigneten Formatvorlage eintragen,
                        // wenn die Formatvorlage Standard nicht mit Arial 10 definiert ist.
  WordApplication.Selection.Set_Style(vParam);
// ******
  WordApplication.Selection.InsertFile(Mischfile, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
Ansonsten mal hier in diesem Umfeld weitersuchen: word.selection.font

rdeutsch 2. Feb 2023 16:40

AW: Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Vielen Dank, aber leider hat sich nichts verändert.
Die Schrift der Normal.dotm scheint hier keinen Einfluss zu haben. In der Normal.dotm ist "Calibri"/Grösse 11 definiert, aber die "falsch" Schriftart nach dem Dokument einfügen ist "Times New Roman"/Grösse 12. Keine Ahnung woher diese Schriftänderung kommt.

Delphi.Narium 2. Feb 2023 16:50

AW: Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Schau Dir bitte mal die Schriftart des ersten Dokumentes an und zwar am letzten Absatz (das Absatzzeichen), nicht irgendwo "mittendrin" dito. ganz am Anfang des zweiten Dokumentes.

Ist dort eventuell Times enthalten.

Beim Einfügen von Texten via Olé kratzt sich Word nicht an den Einstellungen der Normal.dot, sondern nimmt immer für neue Texte das, von dem es meint, dass es am Ende, vor der Einfügestelle, zu finden meint. Dadurch bekommt man auch immer wieder Times zu Gesicht, da das früher mal der Standard war und der über Generationen von Dokumenten weitervererbt wird.

Füge bitte hinter dem
Delphi-Quellcode:
WordApplication.Selection.Set_Style(vParam);
noch ein
Delphi-Quellcode:
WordApplication.Selection.InsertParagraphAfter;
ein. Ändert sich dadurch etwas?

rdeutsch 2. Feb 2023 18:38

AW: Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Das "WordApplication.Selection.InsertParagraphAfte r;" hat leider auch nichts gebracht.
ABER dein Hinweis bezüglich der Schriftart vom letzten Absatz im ersten Dokument war Gold wert. :-) Zwar hatte der letzte Absatz auch keine Times mehr drin, sondern nur Arial. Aber in der Vorlage (mit dem das Hauptdokument generiert wird) war bei der Formatvorlage "Standard" die Schriftart "Times New Roman" definiert. Nachdem ich diese auf Arial gewechselt habe, schauts nun gut aus. :-D
Es ist mir aber ehrlich gesagt nicht klar, wieso nun bei allen Dokumenten das eingefügte zweite Dokument richtig und ohne Formatänderungen angezeigt wird - egal ob mit Text- oder Tabelleninhalt. Und auch die Schriftart ist stimmig - egal welche Schriftart das zweite Dokument hat - Arial oder eine xy-Schriftart.
Hauptsache jetzt passt es.

Vielen Dank für deinen schnellen Support.:hello:

Delphi.Narium 2. Feb 2023 18:51

AW: Word-OLE: Zwei Dokumente zusammenfügen - Schriftart wird verändert
 
Das Problem ist nicht die Schriftart des letzten Absatzes, sondern die Schriftart, die in dem Dokument "hinter" dem letzten Absatz definiert ist, also hinter dem letzten Paragraph-Zeichen für 'nen Zeilenumbruch ..., in dem Dokument. Meist ist das die Schriftart, die in der Normal.dot als Vorlage (zur Zeit der Erstellung - meist Standard) für dieses Dokumentes diente.

Keine Ahnung, wie man das verlässlich prüfen und ändern kann.


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