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


Автор: Yustas911 4.4.2007, 08:54
Вопрос опять про Word и Delphi, только не отправляйте в другие темы, читал, но вопрос остался.
Начнем все по порядку, задача открыть документ, посмотреть есть ли там определенные слова (10 слов), и если есть вывести на форму сообщение или как то по другому сообщить об этом пользователю.
Вопрос с помощью чего это лучше сделать, почитал, посмотрел что возможно через OLE или  Word.Application, суть в том что в дальнейшем планируется искать не только в файлах *.Doc, но и *.xls, *.rtf
Стоит Delphi 7.
пробовал через метод  Word:=ActivateOLEObject('Word.Application'); - выдает ошибку. почему не понимаю smile
Методом проб и ошибок добился? что документ открывается через OLE, но теперь стоит проблема (по крайней мере для меня) как через OLE достучаться до методов документа.
Книг куча, но вот что-то ни где не могу найти описание методов и свойств OLE и  Word.Application.
PS
Delphi изучал давно, помню очень мало, но очень хорошо знаю встроенный язык 1С, поэтому основы ООП знакомы  smile 

Автор: MetalFan 4.4.2007, 09:24
Yustas911, изучай VBA  и будет тебе счастье

Цитата(Yustas911 @  4.4.2007,  08:54 Найти цитируемый пост)
только не отправляйте в другие темы, читал, но вопрос остался

видимо плохо читал. все уже давно подробно расжевано. подробнее некуда

Автор: Rennigth 4.4.2007, 09:30
Yustas911, Не особо работал с Вордом, но что-то помню... 

Создать объект Word:

Код

function MSWordCreateApplication: IWordApplication;
begin
  Result := CreateOleObject('Word.Application') as IWordApplication;
end;


Открыть документ:
Код

function MSWordOpenDocument(const AWordApp: IWordApplication; AFileName: OleVariant): IWordDocument;
begin
  Result := nil;
  if Assigned(AWordApp) and (not VarIsNull(AFileName)) and VarIsStr(AFileName) then
  begin
    if FileExists(string(AFileName)) then
      Result := AWordApp.Documents.Open(AFileName, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam)
    else
      Result := AWordApp.Documents.Add(EmptyParam, EmptyParam,
        EmptyParam, EmptyParam) as IWordDocument;
  end;
end;


Сохранить документ:
Код

function MSWordSaveDocument(const ADocument: IWordDocument; AFileName:  OleVariant): Boolean;
var
  lDir: string;
begin
  Result := False;
  if Assigned(ADocument) and (not VarIsNull(AFileName)) and VarIsStr(AFileName) then
  begin
    lDir := ExtractFilePath(string(AFileName));
    if (lDir <> '') and (lDir <> DecimalSeparator) then
    begin
      ForceDirectories(lDir);
      try
        ADocument.SaveAs(AFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
          EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
        while not ADocument.Saved do
          Sleep(0);
        Result := True;
      finally
        Assert(Result, 'Error: MSWordSaveDocument');
      end;
    end;

  end;
end;


Закрыть документ:
Код

procedure MSWordCloseDocument(const ADocument: IWordDocument);
begin
  if Assigned(ADocument) then
    ADocument.Close(EmptyParam, EmptyParam, EmptyParam);
end;


Закрыть объект Word:
Код

procedure MSWordCloseApplication(const AWordApp: IWordApplication);
begin
  if Assigned(AWordApp) then
     AWordApp.Quit(EmptyParam, EmptyParam, EmptyParam);
end;



в uses нужен Word2000(или Word2003) какой выбирал при установке вроде.

Ну а что делать с полученным IWordDocument надеюсь разберешся.


Автор: Yustas911 4.4.2007, 10:00

а по поводу того где можно взять описание методов и свойств OLE     smile 

Автор: Rennigth 4.4.2007, 10:15
Цитата(Yustas911 @  4.4.2007,  10:00 Найти цитируемый пост)
а по поводу того где можно взять описание методов и свойств OLE       

Какого Ole? smile  Ых многа smile
А вообще самую полную доку по всяким вордам и т.д. ты найдешь только http://msdn.microsoft.com/library/

Автор: Yustas911 4.4.2007, 10:54
извиняюсь, я про  OleContainer

Автор: MetalFan 4.4.2007, 11:40
если работать через позднее связывание, то можно в параметрах не указывать кучу EmptyParam.
подсмотреть св-ва и методы объектов офиса можно в справке по VBA по конкретному приложению.

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