Работа с MS Word из Delphi

1. Управление Word-ом из Delphi.
(опубликовано - 13 SoftWare)
Здесь мы рассмотрим пример того, как управлять объектами 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'.
Теперь напашем обработчики - именно в них и заключается вся функциональность программы:
1. Назначим обработчик 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;

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

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;

3. Назначим обработчик 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'+'пробел' и изучаешь существующие методы и св-ва.
(c) 13 SoftWare. Статья взята с сайта www.vladimir13.narod.ru
Взято из http://forum.sources.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...