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 user profile iconGausi: 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.

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:

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 ....


Delete - Mi 07.03.12 00:13

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Text aus einen Richedit Formatiert in ein Word dokument Importieren.


Lass mich das mal für dich googeln ... [http://lmgtfy.com/?q=Delphi+%2BmsWord]


bummi - Mi 07.03.12 00:29

@Perlsau

hast Du Deinen Link mal ausprobiert?