Entwickler-Ecke

Dateizugriff - doc dateien anzeigen?


sibbe - So 07.03.04 16:27
Titel: doc dateien anzeigen?
servus!

kann mir wer sagen, wie ich eine mit word xp erstellte .doc datei in einer TRichEdit-komponente anzeigen kann?

mit dem "normalen" weg komm ich immer nur auf ein ergebnis: "ÐÏࡱá", egal wie groß die .doc datei ist.

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.ffnen1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
   richedit1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

thx schon mal im voraus...

sibbe

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Keldorn - So 07.03.04 16:47

Hallo

Das geht nicht. Du kannst höchstens dein Worddokument als RTF speichern und in einem Richedit laden. Ein als Word-dokument abgespeichertes Dokument bekommst du nicht in ein Richedit. Wenns unbedingt ein Word-Doc sein muß, dann mach dich mal über OLE schlau.

Mfg Frank


patrick - So 07.03.04 16:49

du kanst leider nicht einfach eine word .doc-datei mit einem richedit laden. es sei den du hast das dokument in einem RichText Fromat gespeichert, welches die komponete auch anzeigen kann.


sibbe - So 07.03.04 17:53

hab da in einem anderen forum sogar was zu gefunden(mit ole), aber irgendwie funzt das auch nicht so wirklich... :roll:


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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
  uses 
  ComObj; 

function ConvertDoc2Rtf(var FileName: string) : Boolean; 
var 
  oWord: OleVariant; 
  oDoc: OleVariant; 
begin 
  Result := False; 
  try 
    oWord := GetActiveOleObject('Word.Application'); 
  except 
    oWord := CreateOleObject('Word.Application'); 
  end
  oWord.Documents.Open(FileName); 
  oDoc  := oWord.ActiveDocument; 
  FileName := ChangeFileExt(FileName, '.rtf'); 
  oDoc.SaveAs(FileName); 
  oWord.ActiveDocument.Close(wdDoNotSaveChanges, EmptyParam, EmptyParam); 
  oWord.Quit(EmptyParam, EmptyParam, EmptyParam); 
  oDoc := VarNull; 
  oWord := VarNull; 
  Result := True; 
end

procedure TForm1.Button1Click(Sender: TObject); 
const 
  FileName = 'c:\Document.doc'
begin 
  if ConvertDoc2Rtf(FileName) then 
  begin 
    ShowMessage('Word document has been converted to .rtf'); 
    RichEdit1.Lines.LoadFromFile(FileName); 
  end
end;


die datei wird zwar erfolgreich in .rtf umgewandelt, aber beim laden steht da der gleiche mist wie bei ner doc datei :x
außerdem (hätt ich vielleicht schon am anfang sagen sollen) möchte ich lediglich den text aus den doc dateien rausfiltern, sachen wie formatierung und objekte oder so sind egal


Sven - So 07.03.04 19:19

Ich hatte mal angefangen eine Textverarbeitung a la Word mit XP-Style zu schreiben. Hierbei benötigte ich auch einen Konverter. ICh bin auf eine Kompo gestoßen, die die MS-Konverter verwendet.
Ich kann aber erst morgen sagen um welche es sich handelt, und woo man diese findet, da ich leider nciht an meinem Win-Rechner sitze.
Diese Kompo läßt sich sehr leicht einsetzen.


sibbe - So 07.03.04 20:31

is vielleicht auch garnich mehr notwendig @sven :)
hab noch von anderswo n paar tipps gekriegt und daraus folgendes kreiert:

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:
27:
28:
29:
30:
uses WordXP, OleServer

procedure tform1.DOC2rtf(InFile, OutFile: OleVariant);
var Filetyp: OleVariant;
    WA: TWordApplication;
    DOC: TWordDocument;
begin
  WA:=TWordApplication.Create(form1);
  WA.ConnectKind:= ckRunningOrNew;
  WA.Connect;
  try
  WA.Documents.Open(infile,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,
  emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
  DOC:=TWordDocument.Create(form1);
  with doc do begin
   ConnectKind:=ckRunningOrNew;
   ConnectTo(WA.ActiveDocument);
   Filetyp := wdFormatRTF; //hier können auch noch andere werte eingetragen werden, um z.b.
                           //in .txt zu formatieren
   SaveAs(OutFile,Filetyp);
   Close;
   Disconnect;
   Free;
  end;
  finally
    WA.Disconnect;
    WA.Quit;
    WA.Free;
  end;
end;


ein aufruf könnte dann so aussehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var F:TextFile;
begin
if opendialog1.Execute then
 doc2rtf(opendialog1.FileName,changefileext(opendialog1.FileName,'.rtf'));

richedit1.Lines.LoadFromFile(changefileext(opendialog1.FileName,'.rtf'));

AssignFile(F,changefileext(opendialog1.FileName,'.rtf'));
Erase(F);
end;


wenns nicht noch ne elegantere lösung gibt (und die gibts bestimmt! :P ), würd ich sagen: prob gelöst

p.s. der vorige code war ziemliche sch**sse