Announcement

Collapse
No announcement yet.

Dokumentenvorlage erstellen ...

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

  • Dokumentenvorlage erstellen ...

    Hi,

    in einem anderen Programm habe folgende Möglichkeit gesehen:

    Das Programm stellt eine Verbindung mit Winword her. Beim Erstellen einer Dokumentenvorlage werden Winword von dem Programm Datenfelder/Variablen zur Verfügung gestellt die man dann in die Dokumentenvorlage einfügen kann.

    Wie kann ich das in meinem Programm realisieren (mit Word verbinden ist nicht das Problem, aber dann).

    Tschüß

    Torsten

  • #2
    Hallo,

    wenn ein Weg gesucht wird, wie in ein Word-Dokument (das von einer DOT-Vorlage erstellt wurde) eigene Daten programmgesteuert eingetragen werden, ist ein Beispiel dafür im <b>Demos\Activex\Oleauto\Word8</b>-Unterverzeichnis von Delphi zu finden.

    Neben dem Weg über das Einfügen über eine <b>Textmarken</b>-Positionierung steht auch der Weg über <b>FORMULARTEXT</b> zur Verfügung.

    <b>Positionierung über Textmarken</b>
    <pre>
    function TForm1.SelectBookmarkRange(sBookmark: String): Range;
    var
    vParam : OleVariant;
    begin
    vParam := sBookmark;
    Result := WordDocument1.Bookmarks.Item(vParam).Range
    end;
    //
    // Text über Textmarken einfügen
    //
    procedure TForm1.ToolButtonInsertClick(Sender: TObject);
    var
    vDOT : OleVariant;
    vNewDOT : OleVariant;
    aRange : Range;
    begin
    vDOT := 'OSW2K.DOT';
    vNewDOT := False;
    WordApplication1.Documents.Add(vDOT, vNewDOT);
    WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument);
    aRange := SelectBookmarkRange('Anschrift1');
    aRange.InsertAfter(EditAnschrift1.Text);
    aRange := SelectBookmarkRange('Anschrift2');
    aRange.InsertAfter(EditAnschrift2.Text);
    aRange := SelectBookmarkRange('Anschrift3');
    aRange.InsertAfter(EditAnschrift3.Text);
    aRange := SelectBookmarkRange('PLZORT');
    aRange.InsertAfter(EditPLZ.Text);
    aRange.InsertAfter(' ');
    aRange.InsertAfter(EditOrt.Text);
    WordApplication1.Visible := True;
    end;
    </pre>
    <b>Positionierung über FORMULARTEXT</b>
    <pre>
    ....
    // Hauptdatenquelle auswerten
    with FMaster do
    begin
    First;
    while not EOF do
    begin
    Application.ProcessMessages;
    if OSWordWaitFrm.Stop then
    Break;
    // neues Dokument von der Vorlage anlegen
    vWordDOT := FTemplateName;
    FWordSrv.Documents.Add(vWordDOT);
    FWordDoc := FWordSrv.ActiveDocument;
    // Referenz auf die Dokument-Textformularfelder holen
    vWordFormFields := FWordDoc.FormFields;
    // Felder des aktuellen Datensatzes auslesen
    for i := 0 to FieldCount-1 do
    begin
    aTField := Fields[i];
    // wenn das Feld sichtbar ist -> in Report aufnehmen
    if aTField.Visible then
    begin
    // Verbindung Textformularfeldname zu DataSet-Feldname herstellen
    vWordField := aTField.FieldName;
    vWordFormFields.Item(vWordField).Result := aTField.DisplayText;
    end;
    end;
    // Ereignisbehandlungsmethoden zugewiesen ?
    if Assigned(FPageHeaderPrint) then
    FPageHeaderPrint(self, FWordSrv);
    // Detail-DataSet berücksichtigten ?
    if Assigned(FDetail) then
    DoDetail;
    if Assigned(FPageFooterPrint) then
    FPageFooterPrint(self, FWordSrv);
    if FPreview then
    begin
    FWordDoc.PrintPreview;
    if MessageDlg('Weitermachen?', mtConfirmation, [mbYes, mbNo], 0)=mrNo then
    begin
    FWordDoc.ClosePrintPreview;
    FWordDoc.Close(False);
    break;
    end;
    FWordDoc.ClosePrintPreview;
    end
    else
    begin
    FWordDoc.PrintOut(False);
    end;
    FWordDoc.Close(False);
    Next;
    end;
    end;
    </pre&gt

    Comment


    • #3
      Hallo Andreas,

      das meine ich nicht. Das Programm hat folgendes gemacht:

      z.B. enthält mein Programm die Kundenanschrift, Anlagenanschrift, Anlagennummer, Anlagenbeschreibung usw..

      Dem Benutzer soll nun die Möglichkeit gegeben werden, eine eigene Dokumentenvorlage zu erstellen. Dabei werden dem Anwender in Word die möglichen Datenfelder(Kundenanschrift, Anlagenanschrift ...) zur Auswahl angeboten, vo denen er dann einen Teil oder auch alle in seine neue Dokumentenvorlage einfügen kann.

      Wie gesagt, ich habe das in einem anderen Programm gesehen.

      Tschüß

      Torste

      Comment


      • #4
        Hallo,

        auf für diese Aufgabe kann der gleiche Weg verwendet werden, nur dass hier eben die Textmarken in der DOT-Vorlage eingefügt werden. Allerdings muss dazu in einer "Master"-DOT-Vorlage ein Grundgerüst vorhanden sein, um die Auswahlelemente korrekt positionieren zu können.

        Oder diese o.g. Anwendung verwendet neutrale Textmarken und stellt die Verbindung "Auswahl der Datenfelder" zur "Textmarke" nur im eigenen Programm her (ändert also die DOT-Vorlage gar nicht)

        Comment


        • #5
          Hallo Andreas,

          ich muß erstmal Asche, viel Asche auf mein Haupt streuen.

          Ich habe das Ganze nicht mehr richtig in Erinnerung gehabt. Auf jedenfall habe ich es mir heute noch einmal in dieser Anwendung angeschaut, und siehe da es handelt sich um ein Seriendruckdokument.

          Bei den angesprochenen Datenfeldern handelt es sich Seriendruckfelder. Mit dieser Eingebung kann ich den Rest auch selber auf die Beine stellen.

          Vielen Dank nochmal.

          Tschüß

          Torste

          Comment

          Working...
          X