Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Управление Word-ом из Delphi

Здесь мы рассмотрим пример того, как управлять объектами Word-а (Excel - аналогично) из программ на Delphi. Исходный код примера можно скачать на страничке 'DownLoad'

Для чего это нужно

Задачи могут быть самые разные, в общем случае это использование возможностей Word-а в своей программе, н-р: проверка текста на орфографию; печать текста, графики; экспорт отчетов в Word или изначальное создание их там и т.д.

Подготовительные работы

На самом деле существует несколько способов сделать это, мы рассмотрим только один (пример кроме Delphi 5, в Delphi5 для этого есть компоненты на закладке Servers переименуете в программе типы на соответствующие компоненты, дальше так же). Для начала начнем новый проект File, New Application; File, Save All. Создадим отдельную папку для проекта и сохраним Unit1 как Main, а Project1 как WordWriter. Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так: Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта:


 uses
   Office_Tlb, word_tlb;
 

Теперь займемся непосредственно программированием

В разделе var опишем следующие переменные:


 // класс приложения ворда
 WordApp: Word_tlb.Application_;
 // класс чего-то типа выделения,
 // т.е. говоришь - выделить ячейку с ... по, а результат скидываешь
 // в эту перем и работаешь с этими ячейками как с 1 объектом
 ARange, TempRange: Range;
 // массив документов
 Docs: documents;
 // 1 документ
 Doc: document;
 // массив параграфов
 pars: Paragraphs;
 // 1 параграф
 par: Paragraph;
 // параметры для передачи
 Template, temp, OpenAsTemplate: olevariant;
 // массив таблиц
 tabls: Tables;
 // 1 таблица
 tabl: Table;
 // рабочая переменная
 i: integer;
 

Далее проектируем форму:

  1. Поместим вверх нашей формы кнопку - button1 типа tbutton, поменяем заголовок (св-во Caption) на 'Старт'.
  2. Под кнопкой разместим панель - panel1 типа tpanel. Внутри панели поместим компонент - bevel1 типа tbevel, поменяем св-во Align на alClient (при этом рамка растянется на всю панель).
  3. Сверху панели (далее все компоненты будут размещаться внутри этой панели) разместим метку - label1 типа tlabel, поменяем значение св-ва Caption на 'Передать в ячейку':
  4. Ниже слева поместим метку - label1 типа tlabel, св-во Caption поменяем на 'X='
  5. Правее метки помещаем компонент Edit1 типа tEdit, св-во Text меняем на '1'
  6. По правой границе Edit1 помещаем компонент UpDown1 типа tUpDown, в списке св-ва 'Associate' выбираем Edit1, св-во 'Position' приравниваем '1'
  7. Чуть отступаем вправо и повторяем шаги 4-6 , заменив Edit1 на Edit2, UpDown1 на UpDown2, Label1 на Label2 соответственно.
  8. Ниже размещаем еще одну метку - label4 типа tlabel, меняем св-во 'Caption' на 'Новое значение ячейки:'
  9. Ниже размещаем компонент Edit3 типа tEdit, св-во Text меняем на '0'
  10. И, наконец, в самом низу панели размещаем кнопку BitBtn1 типа tBitBtn, меняем св-во 'Kind' на 'bkOk'.

Теперь напашем обработчики - именно в них и заключается вся функциональность программы:

Назначим обработчик OnClick компоненту Button1.


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   // если заголовок 'Выход', то закрываем программу
   if button1.caption='Выход' then
   begin
     Application.Terminate;
     exit;
   end
   // иначе (при первом начатии, когда у нас заголовок 'Старт')
   //переименовываем заголовок в 'Выход'
   else
     button1.caption:='Выход';
 
   panel1.Visible:=true;
   // создаем экземпляр ворда
   WordApp:=CoApplication_.Create;
   // делаем его видимым
   WordApp.Visible:=true;
   // шаблон
   template:='Normal';
   // создать шаблон
   OpenAsTemplate:=false;
   // что-то типа оператора with, можно было и напрямую обратиться
   Docs:=WordApp.Documents;
   // добавляем документ
   Doc:=Docs.Add(template,OpenAsTemplate);
 
   // выделить все
   ARange:=Doc.Range(EmptyParam,EmptyParam);
   // массив параграфов
   pars:=doc.Paragraphs;
   // переменная - параметр
   template:=arange;
   // новый параграф
   par:=pars.Add(template);
   // цвет зеленный
   par.Range.Font.ColorIndex:=11;
   // вставляем текст
   par.Range.InsertBefore('Привет !!!');
   // переменная - параметр
   template:=par.Range;
   // новый параграф, чтобы таблица не потерла текст
   par:=pars.Add(template);
   // цвет черный
   par.Range.Font.ColorIndex:=0;
   // вставляем текст
   par.Range.InsertBefore('Переключившись в программу, ' +
   'можно программно менять текст ячеек !');
   // переменная - параметр
   template:=par.Range;
   // новый параграф, чтобы таблица не потерла текст
   par:=pars.Add(template);
   // выделяем параграф
   arange:=par.Range;
 
   // шрифт - жирный
   ARange.Font.Bold:=1;
   // шрифт - рукописный
   ARange.Font.Italic:=1;
   // получить массив таблиц
   tabls:=aRange.Tables;
   // добавляем новую таблицу размером 5 на 5
   tabl:=tabls.Add(arange,5,5);
   // в цикле
   for i := 1 to 5 do
     // задаем значение ячеек
     tabl.Cell(i,1).Range.Text := inttostr(i);
 end;
 

Зададим обработчик формы:


 procedure TForm1.FormDestroy(Sender: TObject);
 var
   // для параметров
   SaveChanges: olevariant;
 begin
   // если Word не закрыт
   if not VarIsEmpty(WordApp) then
   begin
     { а можно сохранить автоматом:
     // имя файла в оле
     template:='Имя.doc';
     // если не сохранен, то
     if doc.Saved=false then
     // сохраняем
     Doc.SaveAs(template, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 
     короче, пишешь имя объекта, ставишь точку и нажимаешь
     'ctrl'+' ' и изучаешь существующие методы и св-ва
     }
     //изменения не сохранять
     SaveChanges:=false;
     // то закрыть сначала документ
     Doc.Close(SaveChanges,EmptyParam,EmptyParam);
     // а потом и ворд
     WordApp.Quit(SaveChanges,EmptyParam,EmptyParam)
   end;
 end;
 

Назначим обработчик OnClick компоненту Bitbtn1:


 procedure TForm1.BitBtn1Click(Sender: TObject);
 begin
   // в соотв ячейку ставим соотв значение,
   // а можно и наоборот - получать значение из ячейки в переменную
   tabl.Cell(UpDown2.Position,UpDown1.Position).Range.Text:=Edit3.Text;
 end;
 

В общем-то, это все ...

Дополнительная информация:

  • Справка Word-а (по Visual Basic, по умолчанию она не ставится - запустите заново Setup и поставте в соотв. месте галочку)
  • Книги:
    • Чарльз Калверт "Энциклопедия пользователя Delphi4" (издательство - DiaSoft)
    • Марко Кэнту "Delphi4 для профессионалов" (издательство - Питер)

Если у Вас другая версия Word-а:

Параметры ф-ций могут отличаться - обратитесь к справке (см выше) или если у Вас версия Delphi 3 и выше, то используем универсальный метод - пишешь имя объекта, ставишь точку (если нужно посмотреть список параметров у функции , то после открывающей скобки ) , нажимаешь 'ctrl'+'пробел' и изучаешь существующие методы и св-ва.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS