уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Сегодня, в последний рабочий день недели, практически весь день провозился над передачей данных из 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
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Winsoft’s Direct Office is a nice third party solution which bypasses the middle-man – namely Word – to create, open, and save DOCX documents.
DOCX is a standardized file format. It can be read using Libre Office, SoftMaker’s TextMaker and on-line Google Docs.
Installation
Steps:
- Download the trial version
- Unzip doffice.zip
- Find Winsoft.DirectOffice.dll in .dofficeDelphi along with the corresponding licenses in dofficeLicenses
DirectOffice vs Word COM API: Less code
Using Direct Office, you can reduce the amount of steps, bloat and coding to access Word Documents. Take for example, a simple operation of opening a document:
Direct Office | Microsoft Word COM API | |
Create Document | Check if Word is Open or Not. If Word is not open, launch Word. |
|
– | Check if Document is Open or Not. If Document is not Open, Open it. |
|
– | Check if View is in correct mode (Print View, Draft View…) If not in correct view, change it accordingly. |
|
Append Page | Insert Page |
Using the Word COM API, this is at least 35 lines of code. This includes exception checks, querying Word, if Word Document is already opened or not.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
uses ComObj, ActiveX, Word2000, ShellApi; ... var MSWord: Variant; Doc_: variant; begin try // Check if Word is already opened? MsWord := GetActiveOleObject(‘Word.Application’); except try MsWord := CreateOleObject(‘Word.Application’); MsWord.Visible := True; except Exception.Create(‘Error’); end; end; // Enumate… is Document already opened? var iNo, iCount: integer; var sFilename: string; var bExists: boolean; sFilename := ‘yourdoc.doc’; bExists := false; iCount := MsWord.Documents.Count_; for iNo := 1 to iCount do begin begin if MsWord.Documents(iNo).Path = sFilename then begin Doc_ := MsWord.Documents(iNo); bExists := true; end; end; end; if not bExists then begin Doc_ := MsWord.Documents; Doc_.Open(sFilename); end; |
In DirectOffice, access to Word Documents is less than 4 lines of code on average.
var WordDocument: WordprocessingDocument; begin WordDocument := CoWordprocessingDocumentClass.Create(‘yourdocument.docx’, WordprocessingDocumentType_Document); end; |
DirectOffice vs Word COM API: Speed
What if I told you, you could create and save Word Documents between 110% to 500% faster than using Word itself?
for iNo := 1 to 10000 do begin para1 := Doc_.Content.Paragraphs.Add(EmptyParam); para1.Range.Text := ‘Hello World’; para1.Range.InsertParagraphAfter; end; |
The equivalent in DirectOffice:
// create body Body := CoBody.Create; Document.AppendChild(Body as _OpenXmlElement); // create paragraph Paragraph := CoDocumentFormat_OpenXml_Wordprocessing_Paragraph.Create; Body.AppendChild(Paragraph as _OpenXmlElement); // create run for iNo := 1 to 10000 do begin Run := CoDocumentFormat_OpenXml_Wordprocessing_Run.Create; Paragraph.AppendChild(Run as _OpenXmlElement); // create text Text := CoDocumentFormat_OpenXml_Wordprocessing_Text.Create; Text.Text := ‘Hello, world!’; Run.AppendChild(Text as _OpenXmlElement); end; |
The estimated time to run the above code in Word for a lenghtly document, is ~ 3 minutes. If you were doing data-processing on a large document, it could possibly take upwards between 30 minutes to days.
The estimated time to run the above code in Direct Office is in seconds.
If your customer does not have Microsoft Word installed, or using a competing Word Processor, such as Google Docs or Libre Office, your applications built using DirectOffice can still function. Prior installation of Office or Word is not necessary.
Winsoft sells the full-version at the website, which can open Word, Excel and PowerPoint documents. Your customer’s time is important. Which solution will you choose?
- Works with: Delphi, C++Builder, VCL
- Works on: Windows 32-bit, Windows 64-bit, Web
Head over and check out the full WINSOFT Direct Office library for Delphi and C++Builder
Like what you see? You can get Direct Office and over 100 other fantastic WinSoft components with our Enterprise Component Pack. For a limited time, when you purchase RAD Studio Enterprise or Architect Edition at special Upgrade Pricing, you will also get this package of third-party software worth over $13,000, including the full WinSoft Component Library, at NO EXTRA COST! Step up to RAD Studio 10.4 today!
Доступ к приложению 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
Нажмите на эту ссылку Ссылка
Techniques to control MS-Word from a Delphi application are discussed in this blog. As a demonstration, I have added different codes which allows to use Word to create tables, to format strings, to create paragraphs and to insert different objects like images, shapes, word arts etc. Finding a PC that does not have MS-Word installed may prove a difficult task: The word processor from Microsoft is ubiquitous. It therefore makes sense to use it whenever it is necessary to create beautiful output from a program. Delphi makes it actually very easy: The language support for Variants as references to OLE automation servers and the support for COM interfaces make steering MS-Word (or indeed Excel or MS-Access) quite easy.
Controlling MS-Word is done through its COM interface: Through Delphi’s OLE mechanism, an OLE reference is obtained to the MS-Word application, and then the various commands exposed by the MS-Word interface can be used to let MS-Word do virtually anything that is needed. The same can be done with Excel and other members of the MS-Office suite.
1. Create a New document
3. Turn auto on/off Spelling grammar check during create for performance
word1.Options.CheckSpellingAsYouType := False;
word1.Options.CheckGrammarAsYouType := False;
4. Do spelling and grammar check
word1.CheckSpelling(doc1.Content.Text);
ShowMessage(IntToStr( doc1.SpellingErrors.Count));
word1.CheckGrammar(doc1.Content.Text);
ShowMessage(IntToStr( doc1.GrammaticalErrors.Count));
5. Add a new document
doc1 := word1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
doc1.Content.Text := ‘test’; //Edit Document//
Doc1.Save; //Save Document//
6. Add a paragraph or a line with fonr format, paragraph format
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘Word Automation in Delphi’;
Font.Size := 16;
Font.Bold := 1;
Font.Underline := 1;
Font.Color := wdColorRed;
ParagraphFormat.Alignment := wdAlignParagraphCenter;
end;
para1.Range.InsertParagraphAfter;
7. Paragraph with back groundcolor and selection color
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘Line with fotn, back ground color ‘;
Font.Name := ‘Verdana’;
Font.Size := 11;
Font.Italic := 1;
Shading.BackgroundPatternColor := wdColorYellow;
MoveStart(wdCharacter, 83);
Font.StrikeThrough := 1;
Font.Color := wdColorRed;
Shading.BackgroundPatternColor := wdColorSkyBlue;
ParagraphFormat.Alignment := wdAlignParagraphRight;
end;
para1.Range.InsertParagraphAfter;
8. Insert picture
para1.Range.InlineShapes.AddPicture(‘C:Testtest1.png’, False, True, EmptyParam);
para1.Range.InsertParagraphAfter;
9. Insert word art
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
doc1.Shapes.AddTextEffect(msoTextEffect29, ‘Auto Word Art’, ‘Algerian’, 20, 0, 0, iLeft, iTop,EmptyParam);
para1.Range.InsertParagraphAfter;
10. Insert text box
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddTextbox(msoTextOrientationHorizontal, iLeft, iTop, 180, 40, EmptyParam);
shape1.TextFrame.TextRange.Text := ‘Enter Your Address Here’;
shape1.TextFrame.TextRange.Font.Bold := 1;
shape1.TextFrame.TextRange.Font.Color := wdColorBlue;
para1.Range.InsertParagraphAfter;
11. Insert line shape
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddLine(iLeft, iTop, iLeft+300, iTop, EmptyParam);
shape1.Line.ForeColor.RGB := wdColorPink;
shape1.Line.Weight := 2;
shape1.Line.DashStyle := msoLineDashDot;
para1.Range.InsertParagraphAfter;
12. Insert line with style
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddLine(iLeft, iTop, iLeft+300, iTop, EmptyParam);
shape1.Line.Style := msoLineThinThick;
shape1.Line.Weight := 5;
para1.Range.InsertParagraphAfter;
13. Insert line with color and pattern
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddLine(iLeft, iTop, iLeft+300, iTop, EmptyParam);
shape1.Line.Pattern := msoPatternOutlinedDiamond;
shape1.Line.Weight := 5;
shape1.Line.ForeColor.RGB := wdColorRed;
shape1.Line.BackColor.RGB := wdColorLightGreen;
14. Insert line with arrow
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddLine(iLeft, iTop, iLeft+300, iTop, EmptyParam);
shape1.Line.Weight := 5;
shape1.Line.ForeColor.RGB := wdColorPink;
shape1.Line.BeginArrowheadStyle := msoArrowheadStealth;
shape1.Line.BeginArrowheadLength := msoArrowheadLengthMedium;
shape1.Line.BeginArrowheadWidth := msoArrowheadWide;
15. Insert Line with different arrow style
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage];
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddLine(iLeft, iTop, iLeft+300, iTop, EmptyParam);
shape1.Line.Weight := 5;
shape1.Line.ForeColor.RGB := wdColorYellow;
shape1.Line.EndArrowheadStyle := msoArrowheadStealth;
shape1.Line.EndArrowheadLength := msoArrowheadLengthMedium;
shape1.Line.EndArrowheadWidth := msoArrowheadWide;
shape1.Line.BeginArrowheadStyle := msoArrowheadDiamond;
shape1.Line.BeginArrowheadLength := msoArrowheadLengthMedium;
shape1.Line.BeginArrowheadWidth := msoArrowheadWide;
16. Insert arrow shape
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage] ;
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddShape(msoShapeUpArrow, iLeft, iTop, 100, 100, EmptyParam);
shape1.Fill.PresetTextured(msoTextureWaterDroplets);
17. Insert smiley face
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage] + 120;
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddShape(msoShapeSmileyFace, iLeft, iTop, 100, 100, EmptyParam);
shape1.Fill.ForeColor.RGB := wdColorYellow;
shape1.Fill.BackColor.RGB := wdColorRed;
shape1.Fill.TwoColorGradient(msoGradientHorizontal, 1);//variant 1-3//
18. Insert shape oval
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage] + 240;
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage];
Shape1 := doc1.Shapes.AddShape(msoShapeOval, iLeft, iTop, 100, 100, EmptyParam);
shape1.Fill.PresetGradient(msoGradientFromCenter, 3, msoGradientHorizon);
19. Insert shape sun
iLeft := para1.Range.Information[wdHorizontalPositionRelativeToPage] + 360;
iTop := para1.Range.Information[wdVerticalPositionRelativeToPage] ;
Shape1 := doc1.Shapes.AddShape(msoShapeSun, iLeft, iTop, 100, 100, EmptyParam);
shape1.TextFrame.TextRange.Text := ‘Sun’;
shape1.TextFrame.TextRange.Font.Bold := 1;
shape1.TextFrame.TextRange.Font.Color := wdColorWhite;
shape1.Fill.ForeColor.RGB := wdColorRed;
shape1.Fill.BackColor.RGB := wdColorOrange;
20. Insert superscript character
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ’10th Standard’;
MoveStart(wdCharacter, 2); // from start to 2 character. 0 based index
MoveEnd(wdCharacter, -9); // from end to 9 character. 0 based index
Font.Superscript := 1;
end;
21. Insert subscript character
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘H2O is formula of water’;
MoveStart(wdCharacter, 1); // from start to 1 character.0 based index
MoveEnd(wdCharacter, -21); // from end to 21 character. 0 based index
Font.Subscript := 1;
end;
22. Insert paragraph with format and border
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := DupeString(‘Paragraph with Align=Justify; BGColor, Space and border. ‘, 5);
ParagraphFormat.Alignment := wdAlignParagraphJustify;
ParagraphFormat.Shading.BackgroundPatternColor := wdColorLightOrange;
ParagraphFormat.Space2;
ParagraphFormat.Borders.Enable := 1;
end;
para1.Range.InsertParagraphAfter;
23. Removed border from paragraph
ParagraphFormat.Borders.Enable := 0;
24. Paragraph first line indent
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := DupeString(‘Paragraph with Align=Left; First Line Indent , BGColor, Space and border. ‘, 5);
ParagraphFormat.Alignment := wdAlignParagraphLeft;
ParagraphFormat.Shading.BackgroundPatternColor := wdColorLightGreen;
ParagraphFormat.Space2;
ParagraphFormat.FirstLineIndent := 20;
ParagraphFormat.Borders.Enable := 1;
end;
25. Insert bullet list
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘INDIA’+#13+’PAKISTAN’+#13+’CHINA’+#13+’BANGLADESH’+#13+’SRILANKA’;
ListFormat.ApplyBulletDefaultOld;
Shading.BackgroundPatternColor := wdColorLightTurquoise;
end;
para1.Range.InsertParagraphAfter;
26. Insert numbered list
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘MATH’+#13+’PHYSICS’+#13+’CHEMISTRY’+#13+’BOTANY’+#13+’ZOOLOGY’;
ListFormat.ApplyNumberDefaultOld;
Shading.BackgroundPatternColor := wdColorLightGreen;
end;
para1.Range.InsertParagraphAfter;
27. Insert outlined number format
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘LION’+#13+’TIGER’+#13+’ELEPHANT’+#13+’CHEETAH’;
ListFormat.ApplyOutlineNumberDefaultOld;
Shading.BackgroundPatternColor := wdColorLightYellow;
end;
para1.Range.InsertParagraphAfter;
28. Insert multi level number list
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘INDIA’;
ListFormat.ApplyNumberDefaultOld;
Font.Color := wdColorBlue;
end;
para1.Range.InsertParagraphAfter;
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘NEW DELHI’+#13+’BOMBAY’+#13+’CHENNAI’;
ListFormat.ListIndent;
Font.Color := wdColorRed;
end;
para1.Range.InsertParagraphAfter;
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘PAKISTAN’;
ListFormat.ListOutdent;
Font.Color := wdColorViolet;
end;
para1.Range.InsertParagraphAfter;
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘KARACHI’;
ListFormat.ListIndent;
Font.Color := wdColorIndigo;
end;
para1.Range.InsertParagraphAfter;
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘BANGLADESH’;
ListFormat.ListOutdent;
Font.Color := wdColorBrown;
end;
para1.Range.InsertParagraphAfter;
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
Text := ‘DHAKA’;
ListFormat.ListIndent;
Font.Color := wdColorLime;
end;
para1.Range.InsertParagraphAfter;
29. Remove bullet and numbered format
ListFormat.RemoveNumbers(wdNumberParagraph);
30. Insert symbol
para1 := doc1.Content.Paragraphs.Add(EmptyParam);
with para1.Range do
begin
para1.Range.InsertBefore(‘Symbol’);
InsertSymbol(87, ‘Symbol’, EmptyParam, EmptyParam);
InsertSymbol(166, ‘Webdings’, EmptyParam, EmptyParam);
InsertSymbol(253, ‘Wingdings’, EmptyParam, EmptyParam);
InsertSymbol(254, ‘Wingdings’, EmptyParam, EmptyParam);
end;
para1.Range.InsertParagraphAfter;
31. Insert table with format and merged cell
// a table of 5 rows and 5 columns//
table1 := doc1.Content.Tables.Add(para1.Range, 5, 5, EmptyParam, EmptyParam );
table1.Borders.Enable := 1;
table1.Columns.Item(1).Width := word1.InchesToPoints(0.5);
table1.Columns.Item(2).Width := word1.InchesToPoints(2);
table1.Columns.Item(3).Width := word1.InchesToPoints(3);
table1.Columns.Item(4).Width := word1.InchesToPoints(0.5);
table1.Columns.Item(5).Width := word1.InchesToPoints(0.5);
table1.Columns.Item(4).Shading.BackgroundPatternColor := wdColorYellow;
table1.Columns.Item(5).Shading.BackgroundPatternColor := wdColorYellow;
// table headers//
table1.Cell(1, 1).Range.Text := ‘Sr. No’;
table1.Cell(1, 2).Range.Text := ‘Name’;
table1.Cell(1, 3).Range.Text := ‘Address’;
table1.Rows.Item(1).Range.Font.Bold := 1;
table1.Rows.Item(1).Range.Font.Color := wdColorBlue;
table1.Rows.Item(1).Range.Shading.BackgroundPatternColor := wdColorGray125;
table1.Rows.Item(1).Cells.Item(4).Merge(table1.Rows.Item(1).Cells.Item(5));
table1.Cell(1, 4).Range.Text := ‘Marks’;
table1.Cell(1, 4).Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//data filling//
table1.Cell(2, 1).Range.Text := ‘1’;
table1.Cell(2, 2).Range.Text := ‘RAJ’;
table1.Cell(2, 3).Range.Text := ‘DELHI’;
table1.Cell(2, 4).Range.Text := ’40’;
table1.Cell(2, 5).Range.Text := ’50’;
table1.Rows.Item(2).Range.Font.Color := wdColorRed;
table1.Cell(3, 1).Range.Text := ‘2’;
table1.Cell(3, 2).Range.Text := ‘KAMAL’;
table1.Cell(3, 3).Range.Text := ‘BOMBAY’;
table1.Cell(3, 4).Range.Text := ’67’;
table1.Cell(3, 5).Range.Text := ’95’;
table1.Rows.Item(3).Range.Font.Color := wdColorRed;
table1.Cell(4, 1).Range.Text := ‘3’;
table1.Cell(4, 2).Range.Text := ‘SARIF’;
table1.Cell(4, 3).Range.Text := ‘SRINAGAR’;
table1.Cell(4, 4).Range.Text := ’94’;
table1.Cell(4, 5).Range.Text := ’24’;
table1.Rows.Item(4).Range.Font.Color := wdColorRed;
table1.Cell(5, 1).Range.Text := ‘4’;
table1.Cell(5, 2).Range.Text := ‘MITHESH’;
table1.Cell(5, 3).Range.Text := ‘VARANASI’;
table1.Cell(5, 4).Range.Text := ’46’;
table1.Cell(5, 5).Range.Text := ’45’;
table1.Rows.Item(5).Range.Font.Color := wdColorRed;
32. Insert header and footer
33. Selection and range
34. Move to specific character, line , table, paragraph etc.
//wdCharacter, wdWord, wdSentence, wdParagraph, wdCell, wdColumn, wdRow, wdTable//
35. Select specific line
36. Cut, copy, paste
para1.Range.Cut;
para1.Range.Copy;
para1.Range.Paste;
37. Find a word
word1.Selection.Find.Text := ‘some’;
word1.Selection.Find.ClearFormatting;
word1.Selection.Find.Forward := True;
word1.Selection.Find.Wrap := wdFindContinue;
word1.Selection.Find.MatchWholeWord := True;
if word1.Selection.Find.Execute(EmptyParam,EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam , EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam) then
ShowMessage(‘yes’);
38. Find and replace
word1.Selection.Find.Text := ‘some’;
word1.Selection.Find.ClearFormatting;
word1.Selection.Find.Forward := True;
word1.Selection.Find.Wrap := wdFindContinue;
word1.Selection.Find.MatchWholeWord := True;
word1.Selection.Find.Replacement.Text := ‘test1’;
word1.Selection.Find.Replacement.ClearFormatting;
word1.Selection.Find.Replacement.Highlight := 1;
word1.Selection.Find.Execute(EmptyParam,EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam , wdReplaceAll,
EmptyParam, EmptyParam, EmptyParam, EmptyParam);
39. Print Preview
doc1.PrintPreview;