Autor Beitrag
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 28.03.03 01:22 
Hallo Leute,

ich möchte meinen Kunden für ihre Rechnungen Wordvorlagen anbieten, die sie nach ihren belieben erstellen und verarbeiten können.
Zur Zeit gibt es "nur" die Möglichkeit mittels Richedit Vorlagen zu erstellen und zu bearbeiten. Dies läuft so ab, daß ich den Anwendern eine Liste mit Tags/Platzhaltern gegeben habe, und mit denen erstellen die Anwender dann Vorlagen nach ihren Vorstellungen. Bisher ist Textformatierung alla Wordpad möglich.
Nun wollte ich wissen, ob es auch möglich ist, das ganze mit Word - Oleautomation zu bewerkstelligen. Ich kann Dokumente laden und Text anhängen, aber ich weiß nicht, wie ich an den bisher geschriebenen Text komme. Also den, der im Template enthalten ist.
Und wie kann ich dann den Text ersetzen?

Gruß
Ken
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 28.03.03 10:01 
Hallo

du könntest Textformularfelder verwenden. Du erstellst dein Worddocument und erstellst darin div. Formularfelder mit entsprechendem Namen.
Füllen von Delphi aus wäre dann so

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
Var name:olevariant;
begin
  name:='Test';
  WordApplication1.ActiveDocument.FormFields.Item(name).result:='Dies ist ein test';
end;

Nachteil: du kannst immer nur den Text füllen, nicht den Vorgabetext. Wenn das Formual geschützt und wieder der Schutz entfernt wird, ist alles wieder weg. :roll:

oder du setzt Textmarken und springst diese mit Goto an.

oder noch ne andere Variante, die ich bevorzuge: Serienbriefe.
du erstellst mit deinem Delphi-Prog eine textdatei oder Datenbank , die als Datenquelle für Word gilt.
Vorteil für mich liegt in der besseren Erstellung für andere Anwender, da du das Word-Dok nicht direkt von Delphi aus erstellst und irgendwelche Felder füllst.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 28.03.03 12:44 
hallo,

ich wollte die dokumente auch nicht mit delphi erstellen, sondern nur öffnen und bearbeiten. Ich will halt auf Word als erstellungsprogramm umsteigen, da die gesamte Kundschaft Word schon besitzt. Daraus ergibt sich, daß die damit umgehen können.
Also muss ich nicht erstmal kurse zum erstellen geben, sondern sag denen nur noch, mit Word dokument erstellen, da und dort speichern und gut ist.

Gruß
Ken
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 28.03.03 13:06 
CenBells hat folgendes geschrieben:
hallo,

sondern sag denen nur noch, mit Word dokument erstellen, da und dort speichern und gut ist.


was anderes mache ich auch nicht. Ich habe mehrere, unterschiedliche Worddokumente als Vorlage, die dann geöffnet, bearbeitet und gedruckt werden oder gleich gedruckt werden.
das mit dem mit Delphi erstellen war vielleicht n bissel blöd ausgedrückt. Ich mein damit schon, daß du dein Grundgerüst in Word erstellst und dann später nur die Daten mit Delphi überträgst. Das du nicht das komplette Word-dok in Delphi

Wenn du z.B. Textmarken/Formularfelder nimmst, ist das für mich ein mehraufwand,da du erst das Worddokument erstellen mußt, anschließend das Delphi-Prog anpassen mußt (diese und jene Textmarke füllen).

Wenn du Serienbriefe verwendest, erstellst du mit deinem Delphi-prog eine Datenquelle und erstellst danach dein Grundgerüst in Word. Da mußt du nicht so aufpassen, ob diese oder jene textmarke/Formluarfeld existiert und du brauchst bei Änderungen nicht auch noch im Delphi-Prog rumzuändern.
Ich zumindestens bin so besser gelaufen, da die Erstellung so viel einfacher geht. und ich auch schnell die Vorlage ändern kann (z.B. in Zeile 3 soll statt der Straße der Ort stehen usw. Wenn deine Daten nur einmal beim Öffnen eingetragen werden, ist das dann nicht so einfach)
Nachteile gibts natürlich auch welche 8)

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 28.03.03 16:26 
Kann ich das ganze auch ohne forumlarfelder machen?
Also, daß die kunden einen fließtext eingeben und ich in diesem eingegebenen Text die Platzhalter ersetze.
Und wie greife ich dann auf diesen Text zu?

Kann ich den Fließtext auch rauskopieren und dann in dem kopierten sachen ersetzen,einfügen? Und das bearbeite zurückkopieren wäre auch wichtig.

Gruß
Ken
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 28.03.03 23:23 
Zitat:

Kann ich das ganze auch ohne forumlarfelder machen?

klar kannst du das. die Frage ist aber, ob das praktisch ist. ob du nun Formular felder oder Seriendruckfelder verwendest: sie sind nunmal dafür gemacht Teile vom Dokument schnell mit anderen Texten zu füllen, ohne den restlichen Text zu verändern, warum sie nicht nutzen?
Ich nutze in einigen Worddocs sowohl Serienbrieffunktionen und Formalarfelder um den Anwendern schnell noch eine ergänzende Eingabe zu ermöglichen. Da alles auf Vordrucken ausgedruckt wird, dürfen keine Zeilen verschoben werden, ein geschütztes Dokument mit Formualrfeldern ist da perfekt.
Zitat:

Also, daß die kunden einen fließtext eingeben und ich in diesem eingegebenen Text die Platzhalter ersetze.
Und wie greife ich dann auf diesen Text zu?

du könntest die Platzhalter suchen / ersetzen (um wieder auf den Serienbriefen rumzureiten, diese Vorschaufunktion gibts da auch ABX-Schaltfläche). Du müßtest immer zwischen deiner Anwendung und Word hin und her wechseln um die Texte zu ersetzen, umständlich oder?

hab irgenwann mal folgendes gemacht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure WordSearchReplace(_Selection:Selection;search,replace:olevariant);
Var f,t,_wrp,repl:olevariant;
  begin
    f    := false;
    t    := true;
    _wrp := wdFindContinue;
    repl := wdReplaceAll;

    with _Selection.Find do
      begin
        ClearFormatting;
        Replacement.ClearFormatting;
        Execute(search,f,f,f,f,f,t,_wrp,f,replace,repl);
      end;

  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WordSearchReplace(WordApplication1.Selection,'<Test>','<Test2>');
end;


Zitat:

Kann ich den Fließtext auch rauskopieren und dann in dem kopierten sachen ersetzen,einfügen? Und das bearbeite zurückkopieren wäre auch wichtig.

wenn du dir ein makro aufzeichnest, Alles markieren wähslt und die Sache ins Clipboard kopierst, kommst du bestimmt an den Text ran. Ob du ihn in deinem Delphi-Prog verwenden kanst, weiß ich nicht. Bloß ist dann die frage, was du mit den Formatierungen machst, oder was ist mit eingefügten Objekten? das wird glaube so nix.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: So 30.03.03 12:27 
Ok, danke.
Ich habe den sinn und zweck der Formularfelder verstanden.
Jetzt habe ich aber noch ne Frage.
Ich bin kein Wordcrack und weiß nicht, wie ich diese Formularfelder einfüge, kannst du mir nochmal weiterhelfen? Geht das in einem normalen Word dokument?

Gruß
Ken
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: So 30.03.03 16:21 
normale Formularfelder: geht in allen Wordformularen
Menu ansicht/Symbolleiste/Formular anzeigen lassen.
Die gebräuchlichsten sollten die Schaltflächen

    - ab| (Text-Formularfeld), Doppelklick auf ein erstelltes drauf und du kannst den Namen ändern. Du kannst auch die Textlänge begrenzen und und und.

    - das Dropdownfeld ist auch nicht schlecht. Macht sich z.B. gut für die Unterschriften bei Recnhungen etc. . auch eine Kombination mit einem normalen Formularfeld ist da gut. Z.B. fügst du der Liste die Namen und ein leeres Feld hinzu. (z.B. "i.A. Cenbells","i.A. Keldorn"," ") falls ein Name nicht in der Liste drin ist, kann er schnell im nachstehenden Formularfeld eingeben werden.

    - und das Schloß (Formular schützen) . Bei einem geschütztem Formular kannst du nur dein Forumularfelder/Dropdownlisten etc. ändern/bzw. schnell mit tab erreichen. Der Rest des Doks ist nicht zu ändern. Vorsicht, wenn du ein Formular schützt/schutz aufhebst haben die Formularfelder/Dropdownlisten wieder ihren Ursprungszustand (vorgabetext). wie schon oben gesagt..


das Problem an den FormularFeldern ist (Ich hab zumindestens keine Lösung gefunden), das du wenn du die Textfelder füllst, immer nur den Text füllst, nicht den Vorgabetext. beim Schutz aufheben ist dann alles wieder weg :cry: .Mußt da mal im Word bischen rumexperimentieren.
eine Eigenschaft/Methode, den Vorgabetext zu füllen, sehe ich leider auch in VB nicht :cry:
das zweite Probleme ist die Namensvergabe der Felder, da du die dann im Delphi-Prog auch anpassen mußt. Ein Außenstehender hat hier schlechte Karten ein Dokument zu erstellen, wenn er nicht genau weiß welche Feldnamen dein Programm unterstützt. Ich geh davon zumindestens immer aus, das ein andere eigen Vorlagen erstellt/ändert. ansonsten brauchst du den Umweg über Word nicht zu gehen, sondern gleich direkt ausdrucken.

Wenn du serienbriefe verwendest, hast du auch eine symbolleiste und im Menu extra/Seriendruck hast du dann einen assistenten zum erstellen.
Das erstellen geht für mich wesentlich schneller/einfacher als mit Formularfeldern. Acuh hast du hier mit dem aktualisieren weniger Probleme. Hauptproblem wäre hier das extra speichern zum Archivieren. Das Word-Dok ist ja nur das Hauptformular mit dem Bezug zur Datenquelle. Vor dem Speichern muß man "in neues Dokument" wählen und das dann speichern.

hoffe das hilft dir erstmal weiter, sonst meld dich wieder.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: So 30.03.03 21:13 
Hallo,

ich nutze in vielen Projekten die EkRTF Komponente zu finden auf ekrtf.code.net.ru/index.html

Dort definierst du dir ein Template, rufst die Methode auf und hast deinen fertigen Bericht. Bietet mindestens soviel Möglichkeiten wie Quickreport.

Gruß,
Tom
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: So 30.03.03 21:41 
daanke Cashels, bietet die mir auch die möglichkeit wasserzeichen auszugeben? Oder weiß wer, wie das mit Quickreport und RichEdits geht?

Gruß
Ken
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 31.03.03 15:55 
ok, nochmal zurück zu word.

Folgendes Szenario.
Der Anwender möchte eine Rechnung erstellen und wählt sagen wir 2 artikel und zu jedem eine menge aus, die auf der rechnung erscheinen soll.
Die ausgabe soll dann so oder ähnlich wie folgendes sein

absenderadresse


Empfängername.
...
...
...
...


betreff

Anrede

hiermit stellen wir ihnen folgendes in rechnung

1 x artikel 1 à artikelpreis summe
7 X artikel 2 à artikelpreis summe

Gesamtsumme betrag

sonstiger text.

Wie mache ich das denn, daß delphi für jeden artikel jedes entsprechnde formularfeld in der rechnung dupliziert?

Gruß
Ken
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 31.03.03 20:21 
*schieb* *duck* *ok, nichts passiert*
Sorry, wenn ich mich schon wieder in Erinnerung bringe.
Ich habe es jetzt geschafft, mal mit den textmarken zu spielen, und das klappt auch sehr gut, allerdings fehlt mir die möglichkeit, zeilen zu duplizieren, so daß die Formatierungen nicht verloren gehen.

Zur not kann ich das auch so machen, daß ich den Text, für jede Rechnungsposition in meiner anwendung generiere und nur eine Textmarke für die positionen definiere, aber dann kann ich den text nicht formatieren.
Und interessant wäre es auch, wie ich die Printpreview wieder beenden kann.

Gruß
KEn
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 31.03.03 21:04 
und einen habe ich noch, wie mache ich das denn mit der serienbrieferstellung?
Also ich habe ein vorgefertigtes Formular und möchte das nun an 10 verschiedene leute schicken, also adressdb vorhanden? Wie bekomme ich denn dann die Serienbrieffunktion von delphi hin?

Gruß
Ken
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 31.03.03 22:11 
Hallo

soviele Fragen 8)

Zitat:

Und interessant wäre es auch, wie ich die Printpreview wieder beenden kann.

ausblenden Quelltext
1:
activedocument.closeprintpreview					

zeichen einfach ein Makro in Word auf, mach das, was du willst und gugg dirs in VB an.
Zitat:

Ich habe es jetzt geschafft, mal mit den textmarken zu spielen, und das klappt auch sehr gut, allerdings fehlt mir die möglichkeit, zeilen zu duplizieren, so daß die Formatierungen nicht verloren gehen.

Zeichen eine Tabelle, blende die Rahmen aus und platziere in jeder Spalte ein Formularfeld, fülle den text mit
ausblenden Quelltext
1:
blabla-Formfield.result:='zeile1'+chr(vk_return+'Zeile2'.					

dann haste deinen Zeilenumbruch und die Formatierung kannst du für jedes Formfield ändern.
Zitat:

und einen habe ich noch, wie mache ich das denn mit der serienbrieferstellung?
Also ich habe ein vorgefertigtes Formular und möchte das nun an 10 verschiedene leute schicken, also adressdb vorhanden? Wie bekomme ich denn dann die Serienbrieffunktion von delphi hin?

ein weites Thema, wo ist das konkrete Problem? hilfreich ist immer wieder ein Makro aufzuzeichnen.

ich hab dir noch was gemailt, kann so schlecht erklären. :roll: ein beispiel ist da besser.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 31.03.03 22:16 
danke, ich schau es mir mal an.

Gruß
ken