![]() |
Word + OLE + Serienbrief + Kodierung
Hi all,
ich muß mir mit Delphi einen Serienbrief in Word ausgeben lassen, und verwende hierzu die Server-Komponenten. Der Serienbrief an sich klappt ganz gut, bis auf folgendes: Umlaute werden durch asiatische Schriftzeichen dargestellt. Wenn ich den Serienbrief 'von hand' öffne, also ohne Delphi / OLE, dann geht ein Dialog auf, in dem ich die kontertierung / Dateikonvertierung festlegen kann. In diesem Dialog steht die Kodierung standard-mäßig auf japanisch (warum auch immer?) und genau diese Einstellung müßte ich per OLE auf 'Windows (Standard)' setzen - nur wie ? Ich hab mich jetzt schon stundenlang auf dieser kruzelahmen ![]() // Richtige Codepage setzen WordApplication1.Options.DefaultTextEncoding := 1258; WordApplication1.ActiveDocument.TextEncoding := 1258; Leider zeigt das keinerlei auswirkungen Zum Ende mal das komplette Script:
Delphi-Quellcode:
Die Liste mit den Codepages gibts hier:
// Word unsichtbar starten
WordApplication1.Visible := true; // Zu Word verbinden WordApplication1.Connect; // Datei öffnen //sFilename := ExtractFilePath(ParamStr(0))+'vorlagen\Ablehnung Einkommen.Doc'; OLEFilename := 'c:\test.doc'; WordApplication1.Documents.Open(OLEFilename, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); // Richtige Codepage setzen WordApplication1.Options.DefaultTextEncoding := 1258; WordApplication1.ActiveDocument.TextEncoding := 1258; //OleStrToStrVar(PWideChar(WordApplication1.ActiveDocument.TextEncoding),test); //showmessage('test'); // Geöffnetes Dokument zu einem 'Serienbrief' machen WordApplication1.ActiveDocument.MailMerge.MainDocumentType:= wdFormLetters; // Datenquelle bestimmen (CSV-Datei) OLEDataSource := 'c:\data1.txt'; WordApplication1.ActiveDocument.MailMerge.OpenDataSource(OLEDataSource, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam); // Richtige Codepage setzen WordApplication1.ActiveDocument.TextEncoding := 1250; // Serienbrief zusammenführen OLEPause := 0; WordApplication1.ActiveDocument.MailMerge.Execute(OLEPause); ![]() |
Re: Word + OLE + Serienbrief + Kodierung
Bei einer normalen Textdatei ist WinWord die Codierung unbekannt und fragt deshalb beim Benutzer nach.
Du könntest deine CSV-Datei im UTF-8 oder UTF-16 Format erzeugen. Wenn Word dann den BOM (Byte Order Mark) erkennt, ist für Word alles klar und es dürfte keine Probleme mehr geben. |
Re: Word + OLE + Serienbrief + Kodierung
Hi!
Danke für deine Antwort. Zwischenzeitlich hab ich ebenfalls herausgefunden, das es klappt, wenn man die TXT-Datei explicit mit einer andere Kodierung als ANSI speichert (Unicode oder eben UTF8). Wie du eben schon sagtest, ist Winword bei einer normalen TXT-Datei die Kodierung unbekannt. Aber es muß doch auch möglich sein, eben diese formatierung per OLE in Word anzupassen, nicht nur über die Textdatei selber... |
Re: Word + OLE + Serienbrief + Kodierung
Zitat:
Ach ja, versuch mal:
Delphi-Quellcode:
OLEDataSource := 'c:\data1.txt';
// ZUERST richtige Codepage setzen WordApplication1.ActiveDocument.TextEncoding := 1250; // und DANN erst laden WordApplication1.ActiveDocument.MailMerge.OpenDataSource(OLEDataSource, {True} emptyParam, // Parameter ConfirmConversions, testweise auf True setzen ? emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz