Тема: Word в Delphi
Показать сообщение отдельно
  #8  
Старый 07.12.2012, 17:07
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Syslenish
Так, у меня едет крыша)) Я разобралась с макросами, но теперь не знаю, как мне мой этот замечательный текст впихнуть именно в нужное мне место!
Значит так.
Создаёшь новый шаблон документа MSWord. В нужных местах вставляешь закладки: "Вставка" -> "Закладка...", даёшь закладке имя, допустим "Закладка1". Сохраняешь шаблон (допустим в папку с новым проектом) но не как документ, а как шаблон (т.е. файл с расширением .dot, а не .doc).
Далее создаёшь новый проект Delphi. На форму бросаешь компоненты TWordApplication и TWordDocument. У них есть свойство "ConnectKind", которое по-умолчанию имеет значение "ckRunningOrNew", сразу же меняешь это значение на "ckNewInstance". Почему? Потому что меня раздражает, когда я работаю в каком нибудь документе Word/Excel и тут к моему Word/Excel подключается какой-то скрипт, открывает в нём какие-то документы и всячески мешает работать, а ещё после всего этого (особая наглость) пытается закрыть приложение Word/Excel со всеми моими открытыми документами. А с параметром "ckNewInstance", скрипт тихонько себе запустит новое приложение (т.е. новый exe-шник winword.exe) и в нём так же тихонько будет что-то там делать.
Теперь бросай на форму кнопку TButton и цепляй такой обработчик OnClick к кнопке:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  doc: _Document;
  o1, o2: OleVariant;
begin
  WordApplication1.ConnectKind := ckNewInstance; // На всякий случай :)
  WordApplication1.Connect;
  try
    o1 := ExtractFilePath(Application.ExeName) + 'Шаблон.dot';
    doc := WordApplication1.Documents.Add(o1, EmptyParam, EmptyParam, EmptyParam);

    WordDocument1.ConnectTo(doc);
    try
      o1 := wdGoToBookmark;
      o2 := 'Закладка1';
      WordDocument1.GoTo_(o1, EmptyParam, EmptyParam, o2).Select;

      with WordApplication1.Selection do
      begin
        TypeText('Обычный текст ');

        Font.Bold := 1;
        TypeText('Жирный текст ');
        Font.Bold := 0;

        Font.Italic := 1;
        TypeText('Курсивный текст ');
        Font.Italic := 0;

        Font.Superscript := 1;
        TypeText('Верхний индекс ');
        Font.Superscript := 0;

        Font.Subscript := 1;
        TypeText('Нижний индекс ');
        Font.Subscript := 0;

        TypeText('Греческая буква омега: ');
        o1 := True;
        InsertSymbol(937, EmptyParam, o1, EmptyParam);

        TypeParagraph;
        TypeText('Следующий абзац ');
      end;
    finally
      WordDocument1.Disconnect;
    end;
  finally
    WordApplication1.Visible := True;
    WordApplication1.Disconnect;
  end;
end;
Думаю разберёшься
Ответить с цитированием