уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Сегодня, в последний рабочий день недели, практически весь день провозился над передачей данных из Delphi в Word. Так как подозрение есть, что работа продолжится то решил кое-какие моменты по работе с Microsoft Word в Delphi запечатлеть и у себя в блоге. Написать такую мини-шпаргалку (тем более, что по Excel уже кое что есть).
Для начала, немного общих моментов по работе с MS Office в Delphi. И первое, что мы сделаем — это создадим объект Word.Application. Создается этот объект абсолютно также, как и объект Excel.Application:
uses ComObj; var Word: variant; [...] procedure CreateWord(const Visible: boolean); begin Word:=CreateOleObject('Word.Application'); Word.Visible:=Visible; end;
Всё достаточно просто. Далее мы можем работать с объектом следующим образом:
- Создавать документ Word с нуля
- Открыть уже существующий документ и изменить в нем текст для получения необходимой формы документа.
Рассмотрим оба варианта, т.к. оба они имеют как свои плюсы, так и недостатки.
Чтобы создать новый документ необходимо выполнить метод Add у коллекции Documents, т.е.:
[...] Word.Documents.Add [...]
и после этой операции уже начинать работать с документам обращаясь к нему по индексу или имени в коллекции. Также, можно создать новый документ по шаблону (*.dot). Для этого необходимо выполнить тот же метод Add, но с одним входным параметром — путем к файлу-шаблону:
[...] Word.Documents.Add(TamplatePath:string); [...]
Чтобы получить список всех открытых в данный момент документов Word можно воспользоваться следующим листингом:
[...] var List: TStringList; i: integer; begin List:=TStringList.Create; for i:=1 to Word.Documents.Count do List.Add(Word.Documents.Item(i).Name); end; [...]
Обратите внимание, что нумерация начинается с 1, а не с нуля. Чтобы активировать любой документ из коллекции для работы, необходимо выполнить метод Activate:
Word.Documents.Item(index).Activate
где index — номер документа в коллекции.
Теперь можно приступать к записи и чтению документа. Для работы с текстов в документе Word, как и в Excel для работы с ячейками таблицы, определен объект Range. Именно методы этого объекта и дают нам возможность работы с текстом. Для начала рассмотрим работу двух основных методов: InsertBefore и InsertAfter.
Как следует из название — первый метод вставляет текст в начало содержимого Range, а второй — в конец. При этом сам объект Range может содержать как весть документ (Document) так и какую-либо его часть. Например, в следующем листинге я вставлю строку в начало документа и затем методом InsertAfter буду добавлять несколько строк текста в конец документа:
[...] Word.ActiveDocument.Range.InsertBefore('Hello World'); Word.ActiveDocument.Range.InsertAfter('текст после Hello World'); Word.ActiveDocument.Range.InsertAfter('окончание строки в документа'); [...]
При выполнении этих трех операции Range содержал весь документ.
Если работать со всем документом неудобно, а необходимо, например выделить фрагмент с 50 по 100 символ и работать с ним, то можно воспользоваться функцией Range, которая вернет нам необходимый объект Range:
var MyRange: variant; begin MyRange:=WordActiveDocument.Range(50,100); MyRange.InsertBefore('Привет');//всё, что было после 50-го символа сдвинулось вправо end;
Это что касается записи текста. Решение обратной задачи — чтения текста из документа ещё проще. Достаточно воспользоваться свойством Text у объекта Range:
[...] ShowMessage(Word.ActiveDocument.Range.Text) //весь текст в документе [...]
Также для чтения документа можно воспользоваться коллекцией документа Words (слова). За слово принимается непрерывный набор символов — цифр и букв, который оканчивается пробелом.
Перечисляются слова документа точно также как и при работе с коллекцией документов, т.е. первое слово имеет индекс 1 последнее — Word.Count.
[...] ShowMessage(Word.ActiveDocument.Words.Item(Word.ActiveDocument.Words.Count).Text) [...]
В данном случае я вывел на экран последнее слово в документе.
Очевидно, что приведенный выше способ работы с документам хорош в случае, когда требуется создать относительно простой документ Word и не требуется лишний раз рассчитывать фрагменты текста, правильно вставлять таблицы и т.д. Если же необходимо работать с документами, которые имеют сложное содержание, например текст в перемежку с рисунками, таблицами, а сам текст выводится различными шрифтами, то, на мой взгляд наиболее удобно использовать второй способ работы с Word в Delphi — просто заменить текст в уже заранее заготовленном документа.
2. Работа с документами Word в Delphi. Открытие готового документа и замена текста.
Чтобы открыть заранее заготовленный документ Word в Delphi достаточно воспользоваться методом Open у коллекции Documents, например так:
var FilePath: string; [...] Word.Documents.Open(FilePath) [...]
Метод Open можно вызывать с несколькими аргументами:
- FileName: string — путь и имя файла;
- ConfirmConversions: boolean — False — не открывать диалоговое окно «Преобразование файла» при открытии файла, формат которого не соответствует формату Word (doc или docx)
- ReadOnly:boolean — True — открыть документ в режиме «Только для чтения»
- AddToRecentFiles: boolean — True, чтобы добавить документ в список недавно открытых документов.
- PasswordDocument: string — пароль для открытия документа
- PasswordTemplate: string — пароль для открытия шаблона
- Revert : boolean — True, чтобы вернуться к сохраненному документу, если этот документ открывается повторно.
- WritePasswordDocument: string — пароль для сохранения измененного документа в файле
- WritePasswordTemplate:string — пароль для сохранения изменений в шаблоне
- Format:integer — формат открываемого документа.
Обязательным параметром метода Open является только FileName, остальные — могут отсутствовать. Если же Вам необходимо воспользоваться несколькими параметрами, то их необходимо явно указывать при вызове метода, например:
[...] Word.Documents.Open(FileName:=FilePath, ReadOnly:=true) [...]
В этом случае документ открывается в режиме «Только для чтения». При таком способе вызова (с явным указанием аргументов) положение аргументов может быть произвольным.
Что касается последнего аргумента — Format, то он может принимать целочисленные значения (применительно к версиям Microsoft Word 2007 и выше) от 0 до 13. При этом, для того, чтобы открыть «родные» вордовские документы (doc) достаточно использовать значения 0 или 6.
Теперь, когда документ открыт его необходимо преобразовать. Обычно я делаю следующим образом: в тех местах документа, в которые необходимо вставить текст я расставляю либо закладки, либо простые строки текста, например, обрамленные символом $ или #. И затем просто выполняю поиск и замену подстрок следующим образом:
function FindAndReplace(const FindText,ReplaceText:string):boolean; const wdReplaceAll = 2; begin Word.Selection.Find.MatchSoundsLike := False; Word.Selection.Find.MatchAllWordForms := False; Word.Selection.Find.MatchWholeWord := False; Word.Selection.Find.Format := False; Word.Selection.Find.Forward := True; Word.Selection.Find.ClearFormatting; Word.Selection.Find.Text:=FindText; Word.Selection.Find.Replacement.Text:=ReplaceText; FindAndReplace:=Word.Selection.Find.Execute(Replace:=wdReplaceAll); end;
Приведенная выше функция позволяет провести поиск и замену текстового фрагмента во всём документе. Для того, чтобы ограничить возможности пользователя при работе с шаблоном документа я обычно ставлю на необработанный файл пароль, а после обработки — пароль снимаю и сохраняю документ с другим названием в необходимую директорию.
Вот, наверное, самые-самые простые методы работы с Word в Delphi. Кстати, пишу пост и, думаю, что у кого-то из читателей может возникнуть вопрос: причём тут Delphi в Internet и Word в Delphi? Честно говоря, приведенный выше фрагменты кода можно использовать для нужд в Internet с натяжкой, например, при автосоставлении небольших отчётов по чему-либо. А вообще, в недалеком будущем, есть в планах поразбираться с Тезаурусом Word и попробовать составить небольшой синонимайзер для собственных нужд — он-то и пригодится нам в Internet
3.1
8
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Delphi –
это один из самых популярных и эффективных инструментов разработки сложных
приложений и возможность интегрировать средства приложений MS Office в разрабатываемые в этой среде проекты.
Известно, что Word и Excel является OLE – объектом. Суть OLE технологии возможность из разрабатываемого
приложения (клиента) взаимодействовать с другими приложениями (серверами). Все
приложения Microsoft Office являются так называемыми «серверами
автоматизации». Microsoft Word, являясь сервером OLE, позволяет
подключаться к себе клиентам и использовать свои методы и свойства.
Работа с MS Word в Borland Delphi. Для
работы с Word
файлами нам потребуется библиотека ComObj, которая входит в стандартную поставку Borland Delphi. Подключается она в разделе Uses.
Для начала нужно подключиться
к Word серверу, другими
словами ещё называют инициализацией. Это происходит следующим образом:
Var
Application: Variant
Begin
Application:=createOLEObject(‘Word.Application’) ;
End;
Сначала вводим
вариантную переменную, затем создаем объект OLE ‘Word.Application‘, и присваиваем его этой
переменной. Эта процедура называется «создание экземпляра сервера».
Создав этот объект, мы затем программируем его свойства и методы.
После создания
экземпляра сервера, нужно либо создать новый документ, либо открыть уже
имеющийся.
Создание нового
документа. Создание документа
производится методом Add. Синтаксис метода:
Add
(Template, NewTemplate, DocumentType, Visible);
Все параметры метода – типа Variant необязательны.
Template |
Имя шаблона, по которому создается новый документ. |
NewTemplate |
Если использовать значение True, то новый документ открывается как шаблон. Значение |
DocumentType |
Может принимать одно из следующих значений констант |
Visible |
Управляет видимостью созданного документа. Если |
Так как все параметры являются
необязательными, то для создания нового документа по шаблону Normal метод можно применить без параметров:
Application.Documents.Add;
Открытие документа. Открытие существующего документа Word реализуется методом Open. Синтаксис метода:
Open (FileName,
ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
Encoding, Visible);
Кроме параметра FileName все остальные необязательны.
FileName |
В параметре указывается имя файла |
ConfirmConversions |
Если в значении этого параметра |
ReadOnly |
Указывая True, открываем документ только для чтения. |
AddToRecentFiles |
Устанавливая значение в True, позволяем добавлять имя открываемого файла в список |
PasswordDocument |
Пароль открываемого документа. |
PasswordTemplate |
Пароль открываемого шаблона. |
Revert |
Параметр, предусмотренный для |
WritePasswordDocument |
Пароль для сохраняемого документа. |
WritePasswordTemplate |
Пароль для сохраняемого шаблона. |
Format |
Конвертор WdOpenFormat: wdOpenFormatAllWord, wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatEncodedText, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText, wdOpenFormatWebPages. По умолчанию wdOpenFormatAuto. Необязательный |
Encoding |
Кодировка для просмотра документа, |
Visible |
Устанавливая True, предусматриваем видимое открытие документа. По |
Например, для открытия документа «c:1.doc» метод Open применяется как
Application.Documents.Open(‘c:/1.doc’);
Все элементы рассматриваемого OLE объекта являются так
называемыми коллекциями. Коллекция – это объект, содержащий
специфический набор методов и свойств. Коллекция похожа на динамический массив.
В ней содержится набор объектов, которые обычно имеют один тип. Вы можете
добавлять в нее элементы, удалять и получать их значения. Доступ к элементу
осуществляется либо по его порядковому номеру, либо по его имени. Например, все
открытые документы представляют собой коллекцию.
Обращение к документу. Обращение к открытому документу, как к элементу
набора коллекции, можно по порядковому номеру методом Item. Например, обращение ко второму документу будет выглядеть как:
Application.Documents.Item(2);
Нумерация всех элементов
в коллекции начинается с единицы, а не с нуля. Аналогичную операцию можно
осуществить еще как:
Application.Documents(2);
Для работы с документом,
его сначала нужно активизировать, т.е. передать ему фокус, подготовить для
редактирования или других операций. Активизирование документа производится
методом Activate. Для активизации документа, его нужно выбрать из коллекции
по его порядковому номеру:
Application.Documents.Item(2).Activate; или по имени файла
Application.Document(‘c:1.doc’).Activate;
К активному документу
можно обращаться, используя свойство ActiveDocument, например, закрыть
активный документ:
Application.ActiveDocument.Close;
Вставка текста в
документ. Далее по тексту мы в
основном будем манипулировать коллекций объектов Range, т.е. весь текст удобно будет
рассматривать как несколько непрерывных областей. Добавление текста
осуществляется следующим образом: сначала создается объект Range, представляющий собой непрерывную область
документа, затем методами этого объекта добавляется текст. Объект Range может объявляться как:
выражение. Range (начало области,
конец области);
Например, объявленный ниже объект Range1 охватывает собой первые 10 символов
второго документа.
Var
Range1:variant;
Begin
Range1:=Application.Documents(2).Range(1,10);
End;
В документе сначала
можно создавать абзацы, т.е. объекты Paragraphs, и затем объединять их
в области. К примеру, в начале активного документа методом Add объекта Paragraphs создаем новый абзац, затем на его основе создаем
объект Range1:
Var
Range1:variant;
Begin
Application.ActiveDocument.Paragraphs.Add;
Range1:=Application.ActiveDocument.Paragraphs.Item(1).Range;
End;
Вставка текста производится
двумя методами объекта Range: InsertAfter и InsertBefore. Синтаксис методов:
выражение. InsertAfter(текст);
Этим методом
производится вставка текста после начала объекта Range выражение. InsertBefore(текст), а этим – до.
При использовании этих
методов, в качестве параметра указать нужно только текст в апострофах. К
примеру, вызов двух операторов даст нам две строки: это вставленный текст InsertBefore и это текст InsertAfter:
Range1.InsertAfter(‘это текст InsertAfter ‘);
Range1.InsertBefore(‘это вставленный текст InsertBefore‘);
У объекта Range есть много полезных свойств. Например:
Свойство Font (шрифт), которое имеет свои подсвойства:
Font.Bold:=True – жирность шрифта
Font.Name:=»Arial» – название
шрифта
Font.Size:= 24 – размер шрифта
Font.Color:= clRed – цвет
шрифта
Font.Italic:= True – наклонность шрифта
Например, вставка жирной строки зеленого цвета:
Range1.Font.Bold:=True;
Range1.Font.Size:=14;
Range1.Font.Color:=clGreen;
Range1.InsertAfter(‘вставленная строка‘);
Объект типа Range можно форматировать. Например, следующей строкой содержимое
объекта Range выравнивается по центру:
Range1.ParagraphFormat.Aligment:=wdAlignParagrapfCenter;
Работа с Excel
файлами в Delphi. Для работы с Excel файлами в Delphi так же нужно подключить модуль ComObj в разделе Uses.
Для
начала нужно подключиться к Excel серверу, другими словами ещё называют инициализацией. Это происходит следующим
образом:
var
Excel: Variant;
Excel := CreateOleObject(‘Excel.Application‘);
Сначала вводим
вариантную переменную, затем создаем объект OLE ‘Excel.Application‘, и присваиваем его этой
переменной. Эта процедура называется «создание экземпляра сервера».
Создав этот объект, мы затем программируем его свойства и методы.
После создания экземпляра сервера, нужно либо создать новую книгу, либо
открыть уже имеющуюся.
Создание новой книги:
Excel.Workbooks.Add;
Открытие существующей книги (где путь – путь к файлу с расширением xls.):
Excel.Workbooks.Open[путь]; //(Excel.Workbooks.Open(‘c:2.xls‘));
Открытие существующей книги только для чтения:
Excel.Workbooks.Open[путь, 0,
True];
Excel.Workbooks.Open(‘c:2.xls’,0,true);
Закрытие Excel:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Отображаем или скрываем Excel на экране:
Excel.Visible := True;
Excel.Visible := False;
Печать содержимого активного листа Excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных
в Excel.
Доступ к ячейке в текущей книге Excel можно осуществить следующим
образом:
// запись значения в
ячейку
Excel.Range[‘A2′]:=’Привет!’;
// чтение значения
из ячейки
s:=Excel.Range[‘A2’];
где A2 – адрес ячейки.
Или
используя стиль ссылок R1C1:
Excel.Range[excel.Cells[2, 2]]:=’Привет!’; где [2, 2] – координата
ячейки.
Вообще,
ячейке Excel можно присваивать любое значение (символьное, целое, дробное,
дата) при этом Excel установит форматирование в ячейке применяемое по
умолчанию.
Формат ячеек в Excel. Выделить (выбрать) группу ячеек для последующей работы можно так:
Excel.Range[Excel.Cells[1,
1],Excel.Cells[5, 3]].Select; либо
Excel.Range[‘A1:C5’].Select;
При этом
будет выделена область находящаяся между ячейкой A1 и C5.
После выполнения
выделения можно установить:
1) Объединение ячеек:
Excel.Selection.MergeCells:=True;
2) Перенос по
словам:
Excel.Selection.WrapText:=True;
3) Горизонтальное
выравнивание:
Excel.Selection.HorizontalAlignment:=3;
при
присваивании значения 1 используется выравнивание по умолчанию,
при 2 –
выравнивание слева,3 – по центру, 4 – справа.
4) Вертикальное
выравнивание
Excel.Selection.VerticalAlignment:=1;
присваиваемые
значения аналогичны горизонтальному выравниванию.
5) Граница
для ячеек:
Excel.Selection.Borders.LineStyle:=1;
При
значении 1 границы ячеек рисуются тонкими сплошными линиями. Кроме этого можно
указать значения для свойства Borders, например, равное 3. Тогда установится
только верхняя граница для блока выделения:
Excel.Selection.Borders[3].LineStyle:=1;
Значение свойства Borders задает различную комбинацию граней ячеек.В
обоих случаях можно использовать значения в диапазоне от 1 до 10.
Доступ к приложению Word осуществляется, как правило, посредством основных двух объектов, Word.Application и Word.Document. Они же обеспечивают доступ и к другим объектам Word (текст, таблицы, кнопки, меню и т.д.). Наиболее легкий метод работы с COM-сервером Word базируется на использовании переменных типа Variant.
Давайте на примере рассмотрим создание документа Word помощью Delphi.
Для начала создадим новый проект (File | New | VCL Foms Application-Delphi) и поместим на него 4 кнопки (TButton). Поменяем заголовки (свойство Caption) этих кнопок на: «Создать документ Word», «Открыть документ Word», «Сохранить документ Word», «Закрыть документ Word». Как понятно из названий, мы будем открывать, создавать, сохранять и закрывать документ Word при нажатии на эти кнопки.
Чтобы начать работать с Word необходимо в модуле формы указать ссылку на использование библиотеки ComObj, поэтому в разделе uses мы дописываем ComObj. Также нам необходимо объявить переменную типа Variant. Давайте создадим обработчик события OnClick для кнопки «Создать документ Word» и напишем код:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);
end;
Если сейчас запустить нашу программу и нажать на кнопку «Создать документ Word», то приложение Word будет запущено, но его окно не будет отображено на экране монитора. В память компьютера будет загружен объект Application, который обеспечивает доступ ко всем внутренним объектам, коллекциям и свойствам. Сейчас нас интересует свойство Visible этого объекта. Если значение этого свойства установить в True, то окно приложения Word станет видимым. Поэтому давайте допишем еще одну строчку в наш код:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Visible:=true; // делаем Word видимым
end;
Вот теперь если запустить программу и нажать на кнопку «Создать документ Word», то наше приложение Word станет видимым и отобразится на экране монитора.
Для того чтобы создать новый документ, необходимо использовать метод Add, коллекции Documents. Поэтому если мы хотим создать новый документ Word с помощью Delphi, необходимо написать:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Add; // создание нового документа
w.Visible:=true; // делаем Word видимым
end;
В этом коде, после выполнения метода Add, будет создан новый документ, который отобразится в окне приложения Word. Обратите внимание, что видимым наш документ (w.Visible:=true) я делаю в самую последнюю очередь. При формировании отчетов, рекомендуется так делать. Это сокращает время создания отчетов и повышает производительность работы приложений.
С созданием документа Word в Delphi разобрались. Теперь перейдем к открытию документа Word. Для этого создаем обработчик события OnClick для кнопки «Открыть документ Word» и напишем следующее:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Open(ExtractFilePath(paramstr(0))+’/Delphi and MS Word.doc’); //открываем документ Word находящийся в папке с программой
w.Visible:=true; // делаем Word видимым
end;
Синтаксис метода Open глядит следующим образом:
Код
Documents.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format)
Давайте рассмотрим аргументы метода Open, их типы и функциональное значение:
FileName: string — путь и имя файла;
ConfirmConversions: boolean — False — не открывать диалоговое окно «Преобразование файла» при открытии файла, формат которого не соответствует формату Word (doc или docx)
ReadOnly:boolean — True — открыть документ в режиме «Только для чтения»
AddToRecentFiles: boolean — True, чтобы добавить документ в список недавно открытых документов.
PasswordDocument: string — пароль для открытия документа
PasswordTemplate: string — пароль для открытия шаблона
Revert : boolean — True, чтобы вернуться к сохраненному документу, если этот документ открывается повторно.
WritePasswordDocument: string — пароль для сохранения измененного документа в файле
WritePasswordTemplate:string — пароль для сохранения изменений в шаблоне
Format:integer — формат открываемого документа.
Обязательным параметром метода Open является только FileName, остальные параметры могут отсутствовать, как отсутствуют в вышеприведенном примере кода. Но если вдруг нам понадобится воспользоваться некоторыми из этих параметров, то их необходимо явно указать при вызове метода. Например, если мы решим открыть файл в режиме «Только для чтения», то код будет выглядеть следующим образом:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Open(ExtractFilePath(paramstr(0))+’/DelphiSchool.doc’, ReadOnly:=true); // открываем документ Word находящийся в папке с программой в режиме «Только для чтения»
w.Visible:=true; // делаем Word видимым
end;
С открытием документа Word тоже разобрались. Переходим к сохранению документа. Для кнопки «Сохранить документ Word» создаем обработчик события OnClick и пишем:
Код
procedure TForm1.Button3Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
//открываем документ Word находящийся в папке с программой в режиме «Только для чтения»
w.Documents.Open(ExtractFilePath(paramstr(0))+’/DelphiSchool.doc’, ReadOnly:=true);
// сохраняем документ в папку с программой под именем DelphiSchool Copy.doc
w.ActiveDocument.SaveAs(ExtractFileDir(paramstr(0))+’/DelphiSchool Copy.doc’);
w.Visible:=true; // делаем Word видимым
end;
Аргументы метода SaveAs, их типы и функциональное назначение представлены ниже:
FileName: String — Путь и имя файла
FileFormat — Число Формат файла
LockComments: Boolean — True — не сохранять комментарии
Password: String — Пароль, который будет использоваться при открытии документа
AddToRecentFiles: Boolean — True — добавить имя файла в список меню File
WritePassword: String — Пароль, который будет использоваться для сохранения документа
ReadOnlyRecommended: Boolean — True — в последующем документ можно открыть «только для чтения»
EmbedTrueTypeFonts: Boolean — True — при сохранении перевести шрифты документа в TrueType
SaveNativePictureFormat: Boolean — Используется для импорта графики из форматов, не поддерживаемых Windows. True — импортировать только графику, поддерживаемую Windows
SaveFormsData: Boolean — True — сохранить форму документа без текста
SaveAsAOCELetter: Boolean — Используется в версиях Word для компьютеров Apple Macintosh
При вызове метода SaveAs, как и при Open, можно задавать как один, так и несколько аргументов. Но, как правило, достаточно только первого аргумента (путь и имя файла).
Ну и последнее что мы рассмотрим – это закрытие документа. Закрыть документы можно с помощью метода Close коллекции Documents. Создадим обработчик события OnClick для кнопки «Закрыть документ Word» и напишем код:
Код
procedure TForm1.Button4Click(Sender: TObject);
begin
w.ActiveDocument.Close(True); // сохраняем и закрываем Word
end;
После того как документ закрыт, можно закрывать и приложение Word:
Код
procedure TForm1.Button4Click(Sender: TObject);
begin
w.ActiveDocument.Close(True); // сохраняем и закрываем Word
w.Quit;
end;
К уроку (статье) Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi прилагается исходник, посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке
Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi
Нажмите на эту ссылку Ссылка
В этой статье мы рассмотрим пример того, как управлять объектами Word-а (Excel — аналогично) из программ на Delphi.
Для чего это нужно ?
Задачи могут быть самые разные, в общем случае это использование возможностей 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 filesmicrosoft 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;
Далее проектируем форму:
- Поместим вверх нашей формы кнопку — button1 типа tbutton, поменяем заголовок (св-во Caption) на ‘Старт’.
- Под кнопкой разместим панель — panel1 типа tpanel. Внутри панели поместим компонент — bevel1 типа tbevel, поменяем св-во Align на alClient (при этом рамка растянется на всю панель).
- Сверху панели (далее все компоненты будут размещаться внутри этой панели) разместим метку — label1 типа tlabel, поменяем значение св-ва Caption на ‘Передать в ячейку’:
- Ниже слева поместим метку — label1 типа tlabel, св-во Caption поменяем на ‘X=’
- Правее метки помещаем компонент Edit1 типа tEdit, св-во Text меняем на ‘1’
- По правой границе Edit1 помещаем компонент UpDown1 типа tUpDown, в списке св-ва ‘Associate’ выбираем Edit1, св-во ‘Position’ приравниваем ‘1’
- Чуть отступаем вправо и повторяем шаги 4-6 , заменив Edit1 на Edit2, UpDown1 на UpDown2, Label1 на Label2 соответственно.
- Ниже размещаем еще одну метку — label4 типа tlabel, меняем св-во ‘Caption’ на ‘Новое значение ячейки:’
- Ниже размещаем компонент Edit3 типа tEdit, св-во Text меняем на ‘0’
- И, наконец, в самом низу панели размещаем кнопку 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 и поставте в соотв. месте галочку)
Книги:
- Чарльз Калверт «Delphi 4. Энциклопедия пользователя» (издательство — DiaSoft)
- Марко Кэнту «Delphi4 для профессионалов» (издательство — Питер)
Если у Вас другая версия Word-а:
Параметры ф-ций могут отличаться — обратитесь к справке (см выше) или если у Вас версия Delphi 3 и выше, то используем универсальный метод — пишешь имя объекта, ставишь точку (если нужно посмотреть список параметров у функции , то после открывающей скобки ) , нажимаешь ‘ctrl’+’пробел’ и изучаешь существующие методы и св-ва.