Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema al manupular archivos .doc (https://www.clubdelphi.com/foros/showthread.php?t=38824)

lookmydoom 30-12-2006 02:20:14

problema al manupular archivos .doc
 
Buenas a todos, estoy haciendo una aplicacion para leer el contenido de los archivos .doc de word sin necesidad de abrirlo puesto que e probado varios codigos del foro y unos cuantos termian abriendo el word y eso es lo que no deceo, puesto que al final al aplicacion terminaria abriendo muchas ventanas de word, el codigo siguiente es un ejemplo de lo que estoy haciendo
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, comobj, OleServer, WordXP, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    WordApplication1: TWordApplication;
    WordDocument1: TWordDocument;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  WordApp,doc: OleVariant;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WordApp:=ComObj.CreateOleObject('Word.Application');
wordapp.visible:=false;
doc:=ComObj.CreateOleObject('Word.Document');
wordapp.documents.open('c:\prueba.doc');
doc.ConnectTo(wordapp.ActiveDocument);
end;

end.


El problema es que no logro conectar el wordapplication con el worddocument.

En resumen lo que necesito hacer es leer el contenido del documento .doc pero sin necesidad de abrir el word para hacer busqueda de palabras para luego cerrar el documento y continuar con el siguiente, en caso que no se pueda leer el contenido me gustaria trasnformarlo a .txt pero tampoco me funcion la funcion save de los TWordDocuments

Al González 04-01-2007 04:10:09

ConnectKind = ckNewInstance
 
¡Hola a todos!

Lookmydoom:

Normalmente, si no tienes abierto Word, no debe aparecer ninguna ventana durante el procesamiento, a menos que ordenes esa aparición explícitamente, o bien, que se encuentre ya abierto y visible Word.

Te aconsejo utilizar el componente nativo TWordApplication, con el cual he trabajado en varias ocasiones. Para evitar que aparezcan nuevas ventanas de Word puedes establecer su propiedad ConnectKind a ckNewInstance. También es recomendable poner su propiedad AutoQuit en True para que no se quede en memoria la instancia de Word al terminar de ejecutarse la aplicación Delphi.

El siguiente código que he preparado muestra cómo abrir un archivo .doc y buscar una palabra dentro del mismo. Si la propiedad ConnectKind es ckNewInstance, no debe aparecer nada en pantalla durante la operación.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  OleVariant (WordApplication1.Documents).Open ('C:\WINDOWS\Temp\Documento.doc');

  If OleVariant (WordApplication1.Selection.Find).Execute ('juan') Then
    ShowMessage ('El documento sí contiene la palabra "juan".')
  Else
    ShowMessage ('El documento no contiene la palabra "juan".');

  OleVariant (WordApplication1.ActiveDocument).Close ();
end;

Lo probé con Delphi 7, componentes Servers 2000 y Word 2000, pero es muy probable que funcione sin ningún problema en versiones posteriores. Espero sea de utilidad.

Un abrazo invisible.

Al González. :)

lookmydoom 03-03-2007 05:29:41

Bueno dicen que es mejor tarde que nunca, pues ya pensaba que este post no me lo respondian asi que lo di por muerto, pero de todas formas muchas gracias por el codigo me sirve de mucho y espero que le sirva a alguien mas


La franja horaria es GMT +2. Ahora son las 20:46:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi