Einzelnen Beitrag anzeigen

bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Word + OLE + Serienbrief + Kodierung

  Alt 20. Nov 2007, 14:44
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 http://msdn2.microsoft.com-Site rumgeschlagen und die Eigenschaft 'TextEncoding' und 'DefaultTextEncondig' gefunden:

// Richtige Codepage setzen
WordApplication1.Options.DefaultTextEncoding := 1258;
WordApplication1.ActiveDocument.TextEncoding := 1258;

Leider zeigt das keinerlei auswirkungen

Zum Ende mal das komplette Script:

Delphi-Quellcode:
  // 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);
Die Liste mit den Codepages gibts hier:
http://msdn2.microsoft.com/en-us/library/aa432511.aspx
  Mit Zitat antworten Zitat