Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Word Delphi
chickenfigt1989 - Mo 05.03.12 17:20
Titel: Word Delphi
Hallo,
Ich will mittels einen Buttonklick den Text aus einen Richedit Formatiert in ein Word dokument Importieren.
Habe folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm2.Button1Click(Sender: TObject); begin if processExists('winword.exe') then WriteToMSWord(RichEdit1.text) WordApplication1.Selection.TypeText('Test'+ #13#10) else ShellExecute(Application.Handle, 'open', PChar('.C:\Program Files\Microsoft Office\OFFICE11\winword.exe'),'','',SW_SHOW); WriteToMSWord(RichEdit1.text) WordApplication1.Selection.TypeText('Test'+ #13#10) end; |
Mit den if ProcessExists will ich überprüfen ob Word schon läuft wenn ja soll es nur den Text kopieren und wenn es nicht läuft sollte zuerst Word gestartet werden.
Allerdings bekomm ich beim Start schon folgende Fehler:
Delphi-Quelltext
1: 2:
| [Error] Unit2.pas(185): Missing operator or semicolon [Error] Unit2.pas(185): Missing operator or semicolon |
Desweiteren bei
WriteToMSWord(RichEdit1.text)
wird der Text zwar in ein Word Dokument Importiert aber unformatiert und es wird jedesmal ein neues Dokument geöffnet.
Könntet ihr mir vllt. behilflich sein?
lg
Moderiert von
Gausi: Topic aus Dateizugriff verschoben am Mo 05.03.2012 um 16:27
Gausi - Mo 05.03.12 17:27
Naja, da fehlt dann wohl das eine oder andere Semikolon. Also das Zeichen, womit so ziemlich jeder Befehl in Pascal-artigen Sprachen abgeschlossen wird.
Und wenn ich mir deine Einrückungen so ansehe, fehlen wahrscheinlich auch ein paar begin und end.
Diese Grundlagen sollten bei dir aber doch mittlerweile sitzen? :gruebel:
bummi - Mo 05.03.12 17:52
Über die Zwischenablage geht bei TRichEdit AFAIK nur CF_TEXT
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| implementation uses ComObj; {$R *.dfm} Function GetTempDir: String; var P: Pchar; begin P := stralloc(255); GetTempPath(255, P); Result := P; strdispose(P); end;
procedure TForm2.Button1Click(Sender: TObject); var Word, Document:OleVariant; fn:String; begin fn := IncludeTrailingBackSlash(GetTempDir) + '~tmp.rtf'; Richedit1.Lines.SaveToFile(fn); Word := CreateOleObject('Word.Application'); Document := Word.Documents.Add(fn); Word.Visible := true; Deletefile(fn); end; |
jasocul - Mo 05.03.12 17:59
Naja, die Meldung sagt ja schon, dass da was fehlt:
Quelltext
1:
| [Error] Unit2.pas(185): Missing operator or semicolon |
Soviel Englisch sollte eigentlich jeder beherrschen.
chickenfigt1989 hat folgendes geschrieben : |
Desweiteren bei WriteToMSWord(RichEdit1.text)
wird der Text zwar in ein Word Dokument Importiert aber unformatiert und es wird jedesmal ein neues Dokument geöffnet. |
Wie hast du das denn rausbekommen? Der Source-Code lässt sich doch gar nicht compilieren.
Tipp:
Bereite den Source erstmal soweit auf, dass er überhaupt läuft.
Dann schreibe doch mal den Source für die Prozedur WriteToMSWord hier hin. Denn dort dürfte vermutlich der Fehler sein, warum die Formatierung nicht übertragen wird.
Oder ist das eine Standard-Prozedure in Delphi? Mir ist die nicht bekannt. :nixweiss:
chickenfigt1989 - Mo 05.03.12 19:49
@Bummi
Kann man mit deiner Methode dann auch den Text Formatieren sprich eine Zeile Fett und eine Zeile andere Schriftart?
Und kann man die Adressen ins Word so importieren dass es wie eine Karteikarte das Format hat?
lg
bummi - Di 06.03.12 08:25
Du kannst Word per OLE komplett fernsteuern.
In meinem Beispiel wird ja lediglich ein RTF geladen, Formatierungen bleiben hierbei natürlich er
halten. Die Frage nach den Karteikarten verstehe ich nicht.
chickenfigt1989 - Di 06.03.12 20:17
Oh sorry
Also der Text sollte halt schön Formatiert sein
Beispiel:
<Datum> <Tel:>
<Anrede>
<Vorname> <Nachname>
<Straße> <PLZ>
Dann sollte Anrede und Straße und PLZ halt noch Fett sein
lg
bummi - Di 06.03.12 22:12
Am lehrreichsten/einfachsten ist es in Word ein Macro aufzuzeichnen, das zu tun was man möchte.
Den Inhalt des Macros kann man dann als Basis für seine OLE-Steuerung verwenden.
Wenn Du ein .DOT anlegst und diese lädst kann Du Deine formatierten Platzhalter aus obigen Beispiel über das FindObject diese durch die Inhalte ersetzen lassen.
Vielleicht kannst Du ja das ein oder andere aus dem Anhang brauchen ....
bummi - Mi 07.03.12 00:29
@Perlsau
hast Du Deinen Link mal ausprobiert?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!