Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Открытие вордовского документа при поиске


Автор: Genius3d 8.6.2007, 20:55
Вот есть функции следующие:



//функция поиска файлов и внутри них по содержанию
Код

procedure TForm1.FindFiles(StartFolder, Mask: string;
 ScanSubFolders: Boolean = True; Node: TTreeNode=nil;st:string='';List: TStrings=nil);
var
 SearchRec: TSearchRec;
 FindResult: Integer;
 NewNode, PNode: TTreeNode;
 S:String;
 a, b: OleVariant;
 j, ilengy: Integer;
 Nashli:boolean;
begin
  ChDir(StartFolder);
  PNode := TreeView1.Items.AddChild(Node, StartFolder);
        // задание пиктограмм для папок закрытых
  PNode.ImageIndex := 1;
  PNode.SelectedIndex := PNode.ImageIndex;
  Nashli:=false;
  ilengy:=Length(WordDocument1.Range.Text);
  j:=0;
 try
   StartFolder := IncludeTrailingBackslash(StartFolder);
   FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
   try
     while FindResult = 0 do
       with SearchRec do
       begin
         if (Attr and faDirectory) <> 0 then
         begin
           if ScanSubFolders and (Name <> '.') and (Name <> '..') then
             FindFiles(StartFolder + Name, Mask, ScanSubFolders,PNode);
         end
         else
         begin
           if MatchesMask(Name, Mask) then
           begin
           // открытие файла для поиска внем
            OpenFile(Name);
              repeat
                a:=j;
                b:=j+Length(st);
                if WordDocument1.Range(a,b).Text=st then
                begin                      //создаем узел если нашли такой файл
                Nashli:=true;
                NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          //задание пиктограммы
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;
          // сохраняем в мемо имя файла, и фразу где встречается искомый текст
                List.Add(StartFolder + Name);
                List.Add(WordDocument1.Range(a,b).Text);
                List.EndUpdate;
                 end;
                inc(j);
                until (j>=ilengy-Length(st)) or Nashli;
             If Nashli then
             begin // если нашли файл содержащий информацию, то заносим его название в мемо
  //и текст в котором содержиться искомая строка для поиска
             List.Add(StartFolder + Name);
                List.Add(WordDocument1.Range(a,b).Text);
                List.EndUpdate;
             end;
             //закрываем word
             WordDocument1.Close;
              WordApplication1.Disconnect;
                {
              NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;
              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;   }
           end;
         end;
         FindResult := FindNext(SearchRec);
       end;
   finally
     FindClose(SearchRec);
   end;
 finally
 end;



//открывает файлы для поиска:
Код


procedure TForm1.OpenFile(FileName: string);
var
DocName,ConfConv,ReadOnly,AddToRecFiles,Psw,PswTmp,Revert,WritePsw,WritePswTmp,
  Fmt,replace:OleVariant;
begin
DocName:=FileName;//èìÿ ôàéëà
ConfConv:=False;
ReadOnly:=False;
AddToRecFiles:=False;
Psw:='';
PswTmp:='';
Revert:=False;
WritePsw:='';
WritePswTmp:='';
Fmt:=wdOpenFormatAuto;
replace:=wdReplaceAll;
WordApplication1.Connect;
WordApplication1.Visible:=false;//íå âêëþ÷àåì âèäèìîñòü Âîðäà
WordApplication1.Documents.Open(DocName, ConfConv, ReadOnly, AddToRecFiles,
  Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
end;



Проблема в том, что работа программы падает когда файл открывается(((....
пишет "Файл не найден".

можете помочь? бьюсь уже который день. Дельфи 7 стоит у меня/

Может я неправильно задаю параметры для Open?

Автор: Genius3d 8.6.2007, 22:43
короче починил))... теперь другая проблема как вывести мне кусок текста в котором встречается искомое слово???
чтобы было понятно вообще в каком контексте это слово употребляется или текст

правленный код:
Код

procedure TForm1.FindFiles(StartFolder, Mask: string;M:string;
 ScanSubFolders: Boolean = True; Node: TTreeNode=nil;st:string='';List: TStrings=nil);
var
 SearchRec: TSearchRec;
 FindResult: Integer;
 NewNode, PNode: TTreeNode;
 S:String;
 a, b: OleVariant;
 j, ilengy: Integer;
 Nashli:boolean;

begin
  ChDir(StartFolder);
  PNode := TreeView1.Items.AddChild(Node, StartFolder);
        // çàäàíèå ïèêòîãðàììû çàêðûòîé ïàïêè
  PNode.ImageIndex := 1;
  PNode.SelectedIndex := PNode.ImageIndex;
  Nashli:=false;
  ilengy:=Length(WordDocument1.Range.Text);
  j:=0;
 try

   StartFolder := IncludeTrailingBackslash(StartFolder);
   FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
   try
     while FindResult = 0 do
       with SearchRec do
       begin


         if (Attr and faDirectory) <> 0 then
         begin
           if ScanSubFolders and (Name <> '.') and (Name <> '..') then
             FindFiles(StartFolder + Name, Mask,M, ScanSubFolders,PNode);
         end
         else
         begin
           if MatchesMask(Name, Mask) then
           begin
           // çàíåñåíèå óçëà â ñïèñîê
           //   List.Add(StartFolder + Name);
             // çàíåñåíèå óçëà â äåðåâî
            if M ='doc' then
            begin
            OpenFile(StartFolder + Name);
              repeat
                a:=j;
                b:=j+Length(st);
                if WordDocument1.Range(a,b).Text=st then
                begin                      //ñîçäàåì óçåë åñëè íàøëè ôàéë òàêîé
                Nashli:=true;
                NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          // çàäàíèå ïèêòîãðàììû
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;

              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;

                 end;

                inc(j);
                until (j>=ilengy-Length(st)) or Nashli;
             //íå çàáûâàåì çàêðûòü word
             List.Add(StartFolder + Name);
             List.Add(WordDocument1.Range(a,b).Text);
             List.EndUpdate;
             WordDocument1.Close;
             WordApplication1.Disconnect;
             end;
                {
              NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          // çàäàíèå ïèêòîãðàììû
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;

              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;   }

           end;
         end;
         FindResult := FindNext(SearchRec);
       end;
   finally
     FindClose(SearchRec);
   end;
 finally

  // if List.Count = 0 then
 //   List.Add('Íè÷åãî íå íàéäåíî');
 //  List.EndUpdate;
 end;
 


end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)