уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Сегодня, в последний рабочий день недели, практически весь день провозился над передачей данных из 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
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
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;
Доступ к приложению 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
Нажмите на эту ссылку Ссылка