Microsoft word в delphi

Microsoft word в delphi
Сьогодні, в останній робочий день тижня, практично весь день провозився над передачею даних з 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;

Все досить просто. Далі ми можемо працювати з об'єктом наступним чином:

  1. Створювати документ Word з нуля
  2. Відкрити вже існуючий документ і змінити в ньому текст для отримання необхідної форми документа.

Розглянемо обидва варіанти, тому що обидва вони мають як свої плюси, так і недоліки.

1. Створення документа Microsoft Word в Delphi з нуля.

Щоб створити новий документ необхідно виконати метод Add у колекції Documents, тобто .:

і після цієї операції вже починати працювати з документами звертаючись до нього по індексу або імені в колекції. Також, можна створити новий документ за шаблоном (* .dot). Для цього необхідно виконати той же метод Add, але з одним вхідним параметром - шляхом до файлу-шаблоном:

Згоден з вами, Наіль. І завжди намагаюся якраз мінімізувати зайві витрати при розробці програм. Переконати людини можна, особливо, коли в руках є «убеждалка» у вигляді прайс-листа :) Але можу якщо сам по собі замовник програми ніяк не залежить від закупівлі софта - переконати практично нереально. Простий приклад - університет. В універі все закупівлі софа проходять централізовано, і окремо взятої кафедрі по барабану скільки чого варто - вона просто регулярно відраховує до фонду універу фіксований відсоток з доходу і завжди має свіжий софт і нікому не важливо треба кафедрі цей софт чи ні - всунули балванки і йди встановлюй . Кафедрі потрібно нестандартна програма, наприклад, генеруюча списки студентів за певними ознаками (не обов'язково статевим) і повинна формувати документ, скажімо для секретаря кафедри, навчальних майстрів і т.д. щоб вони його далі переробляли, вносили чогось і т.д. Як думаєте яке перша вимога в цьому випадку? звіт в файлі Word / Excel. І тільки заїкнися по Оо - задушать :).

З.И. За посилання на бібліотеку - спасибо огроменное, тому що паралельно якраз в Лазарус намагаюся подружитися з оО - може частина бібліотеки і стати в нагоді якраз

Алімбеков Хидзен.

Ось текст макросу:
[Code]
Sub Макрос1 ()
'
'Макрос1 Макрос
'
'
With ListGalleries (wdNumberGallery) .ListTemplates (1) .ListLevels (1)
.NumberFormat = "% 1."
.TrailingCharacter = wdTrailingTab
.NumberStyle = wdListNumberStyleArabic
.NumberPosition = CentimetersToPoints (0.63)
.Alignment = wdListLevelAlignLeft
.TextPosition = CentimetersToPoints (1.27)
.TabPosition = wdUndefined
.ResetOnHigher = 0
.StartAt = 1
With .Font
.Bold = wdUndefined
.Italic = wdUndefined
.StrikeThrough = wdUndefined
.Subscript = wdUndefined
.Superscript = wdUndefined
.Shadow = wdUndefined
.Outline = wdUndefined
.Emboss = wdUndefined
.Engrave = wdUndefined
.AllCaps = wdUndefined
.Hidden = wdUndefined
.Underline = wdUndefined
.Color = wdUndefined
.Size = wdUndefined
.Animation = wdUndefined
.DoubleStrikeThrough = wdUndefined
.Name = ""
End With
.LinkedStyle = ""
End With
ListGalleries (wdNumberGallery) .ListTemplates (1) .Name = ""
Selection.Range.ListFormat.ApplyListTemplateWithLevel ListTemplate: = _
ListGalleries (wdNumberGallery) .ListTemplates (1), ContinuePreviousList: = _
False, ApplyTo: = wdListApplyToWholeList, DefaultListBehavior: = _
wdWord10ListBehavior
Selection.TypeText Text: = "Пункт 1"
Selection.TypeParagraph
Selection.TypeText Text: = "Пункт 2"
Selection.TypeParagraph
Selection.TypeText Text: = "Пункт 3"
Selection.TypeParagraph
Selection.Range.ListFormat.RemoveNumbers NumberType: = wdNumberParagraph
Selection.TypeText Text: = "Кінець нумерованого списку"
End Sub
[/ Code]

Прошу вибачення за дурне питання, але як саме викликати цю функцію в коді? В тому сенсі, що мені наприклад треба замінити рядки в декількох місцях, тобто викликати треба кілька разів. Перш за все, не помітивши, що це НЕ процедура, думав просто окремим оператором кілька разів, але потім помітив function, і не можу збагнути як викликати, адже виклик повинен бути після оператора присвоєння.

Microsoft word в delphi
Владислав Баженов.

Так і викликайте кілька разів в коді. Результат функції - boolean. Якщо заміна тексту пройшла успішно, то функція поверне True, інакше False. Якщо вам не важливо заміниться текст чи ні, то викликайте так:
begin
// тут якийсь код
FindAndReplace ( 'Текст', 'Замінюючий текст');
// знову кокой-то ваш код
FindAndReplace ( 'Текст2', 'Замінюючий Текст2');
end;
Або так, есді подальша робота залежить від того, буде замінене чи текст чи ні:
begin
// тут якийсь код
if FindAndReplace ( 'Текст', 'Замінюючий текст') then
FindAndReplace ( 'Текст2', 'Замінюючий Текст2')
else
ShowMessage ( 'Не вдалося замінити рядок "Текст"')
end;

Схожі статті