Aquí les dejo la función completa, lo que hace es buscar una frase en documentos word que están en una carpeta y cada resultado lo inserta como un objeto TResultado en un TObjectList:
Código Delphi
[-]
type
Tresultado=class(TObject)
NombreArchivo:String;
TextoVistaPrevia:String;
Relevancia,EncontradoEnLinea:integer;
end;
function TFrmPrincipal.BuscarPalabra(carpeta,frase:String;TipoBusqueda:integer):TObjectList;
var
aliasArchivo:Text;
renglonTemporal,RutaArchivoActual:string;
numeroRenglonActual,i,j,m,relevancia,CantidadPalabrasSeparadas,CantidadDeArchivos,numeroDeParrafos:i nteger;
resultado:TResultado;
ListaDeArchivos,PalabrasSeparadas:TStringList;
dw:Variant;
begin
dw:=CreateOleObject('word.Application');
result:=TObjectList.create(true); ListaDeArchivos:=TStringList.Create;
PalabrasSeparadas:=TStringList.Create;
frase:=trim(frase);
PalabrasSeparadas:=Dividir(frase,' '); CantidadPalabrasSeparadas:=PalabrasSeparadas.Count;
ListaDeArchivos:=ListaArchivos(ExtractFilePath(Application.ExeName)+carpeta,'*.doc',false);
CantidadDeArchivos:=ListaDeArchivos.Count;
for i:=0 to CantidadDeArchivos-1 do
begin
RutaArchivoActual:=ExtractFilePath(Application.exename)+carpeta+'\'+ListaDeArchivos[i]+'.doc'; dw.Documents.Open(RutaArchivoActual,null,false); numeroRenglonActual:=1;
numeroDeParrafos:=dw.ActiveDocument.paragraphs.count;
while numeroRenglonActual < numeroDeParrafos do begin
numeroRenglonActual:=numeroRenglonActual+1;
renglonTemporal:=dw.ActiveDocument.paragraphs.item(numeroRenglonActual).range.text;
if TipoBusqueda=1 then begin
relevancia:=0;
for j:=0 to CantidadPalabrasSeparadas-1 do
begin
if AnsiContainsText(renglonTemporal,PalabrasSeparadas[j]) then
relevancia+=1;
end;
if relevancia>0 then
begin
resultado:=TResultado.Create; resultado.EncontradoEnLinea:=numeroRenglonActual;
resultado.TextoVistaPrevia:=renglonTemporal;
resultado.NombreArchivo:=RutaArchivoActual;
resultado.Relevancia:=relevancia;
result.Add(resultado); end;
end
else if TipoBusqueda=2 then begin
if AnsiPos(frase,renglonTemporal)<>0 then
begin
resultado:=TResultado.Create; resultado.EncontradoEnLinea:=numeroRenglonActual;
resultado.TextoVistaPrevia:=renglonTemporal;
resultado.NombreArchivo:=RutaArchivoActual;
result.Add(resultado);
end;
end;
end;
dw.quit;
ShowMessage('termino la busqueda');
end;
end;
Gracias por su atención