Announcement

Collapse
No announcement yet.

Delphi 5 C/S - Serienbrief mit MS Word

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi 5 C/S - Serienbrief mit MS Word

    Hallo,

    ich möchte aus einem Delphi-Programm mit WORD Serienbriefe schreiben. Die Datenkommen aus einer Sybase-SQL-Datenbank und sollen nach Word übergeben werden für den Druck. Jetzt muß ich ja in Word Platzhalter für die Adresse setzen. Gibt es da etwas in Word oder muß ich hier selber Platzhalter setzen in Form von z.B. @@Name1, @@Strasse, etc.?

    Vielen Dank für Eure Rückantwort im voraus.

  • #2
    Hallo,

    die Leistungsfähigkeit von Microsoft Word führt in diesem Punkt dazu, dass wir als Entwickler die Qual der Wahl haben: <br>
    a) Textformularfelder, <br>
    b) Textmarken, oder <br>
    c) die offizielle Serienbrief-Funktion von Word.

    Am einfachsten geht der Weg c), da hier die Zuordnung (was soll wo eingefügt werden) visuell direkt in Word erfolgt. Das eigene Programm muss nur noch die Daten aus der SQL-Datenbank in der Seriendruck-Steuerdatei ablegen - wobei dort die Formate CSV (ASCII-Text), XLS und MDB üblich sind. Ich selbst bevorzuge MDB (ACCESS-Datenbankdatei) oder XLS (Excel-Tabelle), wobei ich diese im eigenen Programm über ADOX erzeuge und über ADO mit den Daten fülle.

    Das folgende Beispiel für einen Seriendruck über eine selbst geschriebenen Seriendrucksteuerdatei im CSV-Format stammt aus meinem Buch <i>COM/DCOM/COM+ mit Delphi</i>:
    <pre>
    { ************************************************** **************
    Typ : Hauptformular
    Autor : Andreas Kosch
    Compiler : Delphi 5 Enterprise
    Betriebssystem : Windows 98
    Begonnen am : 21.12.1999
    Beschreibung : MailMerge-Objekt von Word 2000.
    Es ist notwendig, die Wrapper-Komponenten
    für Word 2000 neu zu erzeugen, die Delphi5-
    Package dclaxserver60.bpl muss dazu deaktivert
    werden, damit die Klassennamen eindeutig sind.
    ************************************************** ************** }

    unit MailMergeFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, Word_TLB, OleServer, ComCtrls;

    type
    TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    WordApplication1: TWordApplication;
    WordDocument1: TWordDocument;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    { CSV-Datei ist als Datenquelle mit dem Dokument fest verbunden }

    procedure TForm1.Button1Click(Sender: TObject);
    var
    vFileName : OleVariant;
    aMailMerge : MailMerge;
    vPause : OleVariant;
    vSave : OleVariant;
    begin
    vFileName := 'C:\Temp\Out\MailMerge\Serienbrief.doc';
    WordApplication1.Connect;
    WordApplication1.Documents.OpenOld(vFileName, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam);
    WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument);
    WordApplication1.Visible := True;
    vPause := True;
    aMailMerge := WordDocument1.MailMerge;
    aMailMerge.Destination := wdSendToNewDocument;
    aMailMerge.Execute(vPause);
    ShowMessage('Fertig');
    vSave := False;
    WordApplication1.Documents.Close(vSave, EmptyParam, EmptyParam);
    WordDocument1.Disconnect;
    WordApplication1.Disconnect;
    end;

    end.
    </pre&gt

    Comment

    Working...
    X