Компонент delphi как word

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:

  1. Download the trial version
  2. Unzip doffice.zip
  3. 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!

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Сегодня, в последний рабочий день недели, практически весь день провозился над передачей данных из 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. Открыть уже существующий документ и изменить в нем текст для получения необходимой формы документа.

Рассмотрим оба варианта, т.к. оба они имеют как свои плюсы, так и недостатки.

Чтобы создать новый документ необходимо выполнить метод 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
голоса

Рейтинг статьи

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

8

При добавлении новых записей табельный номер
проверяется, если такой номер уже есть в списке, то запись игнорируется,
выводится сообщение о неверном табельном номере и курсор возвращается к вводу
информации.

Описание результатной (выходной)
информации

Результатной информацией будет являться
типизированный файл записей Zarplata.dat,
который имеет структуру описанную в таблице 3:

Таблица 3. Результатная информация

Наименование
поля

Идентификатор

Тип
поля

Разрядность
в знаках

Номер
месяца

nommes

word

Табельный
номер

tabnom

word

Фамилия,
имя, отчество

fio

string

80

Подразделение

podrazdelenie

string

25

Должность

dolgnost

string

25

Оклад

oklad

real

Премия
(в % до 100)

premij

word

Удержано
из зарплаты

udergano

Real

Сумма
премии

sumprem

Real

Сумма
к выдаче

sumkv

Real

Также результатной информацией является форма
«Зарплата». На эту форму будут выводиться необходимые данные о сотрудниках и их
заработной плате в текстовый редактор из файла «Zarplata.dat».
В этой форме поля Должность и Подразделение будут заполняться из списка
значений.

Кроме того, выходной информацией будет являться
форма в Excel, которая
должна быть представлена в виде таблицы следующей структуры:

·        Номер месяца

·        Табельный номер

·        Фамилия, имя, отчество

·        Подразделение

·        Должность

·        Оклад

·        Премия (в % до 100)

·        Удержано из зарплаты

·        Сумма премии (расчетная)

·        Сумма к выдаче (расчетная)

В приложении будет реализована возможность
поиска информации по табельному номеру, должности или подразделению сотрудников.

Разработка алгоритма решения задачи

С помощью данного приложения пользователь сможет
решить ряд следующих действий:

1.       Добавление данных в файл из нолей ввода
и раскрывающихся списков, расчет необходимых сумм и отображение записи в
редакторе. Одновременно новый табельный номер запоминается в списке СоmbоВох3.
Если такой номер уже есть в списке, то запись игнорируется, выводится сообщение
о неверном табельном номере и курсор возвращается к вводу информации;

2.       По кнопке «Вывести расчетные листки»
формируются расчетные листки и выводятся в редактор;

3.       Кнопка «Поиск» — выполнить поиск по
выбору пользователя. Если пользователь выбрал варианты «По подразделению» или
«По должности» осуществить поиск по образцу, взятому из поля ввода в панели
«Поиск». Результаты поиска отобразить в редакторе. Если пользователь выбрал
вариант «По табельному номеру», то осуществить поиск информации из файла по
выбранному табельному номеру и в предварительно очищенном редакторе вывести
расчетный лист с показом всех причитающихся данному лицу выплат и суммы «К
выдаче»;

.        По кнопке «Напечатать» данные из
редактора вывести на печать;

5.       По кнопке «Экспорт в Ехсеl»
данные из файла вывести в виде книги Excel

.        По кнопке «Очистить» данные из
редактора удаляются;

7.       По кнопке «Закрыть» закрыть файл и
осуществить корректное завершение работы.

Блок-схемы приложения

Схема.

Схема.

Схема.

Схема.

Описание программы

Назначение и область применения программы

Данное приложение называется «Зарплата» Тема
разработки — создание приложения, в стиле MS
Word, содержащего
строку меню и панель инструментов.

Приложение «Зарплата» предназначено для
автоматизации расчета заработной платы бухгалтерией предприятия (предусмотрена
возможность добавления записей, формирования расчетных листков на каждого
сотрудника, вывода итоговой ведомости в Excel).
Также с помощью этой программы можно осуществить поиск сведений о заработной
плате сотрудников по подразделению, по должности или табельному номеру. Предусмотрена
возможность вывода данных на печать.

Описание внешнего дизайна (интерфейса
приложения).

Рис. 1. Вид окна будущего приложения.

1.       TMainMenu
— главное меню формы.

2.       TToolBar
— панель инструментов.

3.       TToolButton
— кнопка панели инструментов.

4.       TRichEdit
— текстовый редактор.

5.       TPanel — панель.

6.       TGroupBox
— панель группирования.

7.       TRadioButton — переключатель.

.        TCombobox — комбинированный
список.

.        TLabel — метка.

.        Tedit
— однострочное редактируемое текстовое поле.

11.     TButton
— кнопка.

В данном окне реализованы следующие пункты меню:

.        Открыть

.        Экспорт в Excel

.        Печать

.        Закрыть

.        Добавить запись

.        Вывести расчетные листки

.        Очистить текстовый редактор

.        Поиск

.        Справка

.        О программе

Рис.2. Форма «О программе», вызываемая командой
меню

Рис.

Помощь/О
программе.

1.       TImage — изображение.

2.       TLabel — метка.

.        TBitBtn
— кнопка с изображением.

Описание внутренней структуры

Архитектура приложения.

Организация данных

Для работы данного приложения используются
структуры данных, такие как:

1.       Файл типа запись.

Запись имеет следующую структуру:

tzarplata=record:word;:word;:string[80];:string[25];:string[25];:real;:word;:Real;:Real;:Real;;

В данной программе файл используется для
постоянного хранения информации о заработной плате сотрудников за месяц. Длина
любого компонента типизированного файла строго постоянна, что даёт возможность
организовать прямой доступ к каждому из них. Также используется одномерный
динамический массив типа запись в процедуре поиска записей для временного
хранения информации. Описание алгоритмов приложения.

procedure
FormCreate(Sender:
TObject);

В процедуре происходит очистка текстового
редактора для дальнейшей работы с приложением.

procedure Action1Execute(Sender:
TObject);:file of tzarplata;:tzarplata;

Процедура открытия файла.

После открытия файла его содержимое будет
отображаться в текстовом редакторе.

procedure Action2Execute(Sender:
TObject);:file of tzarplata;:tzarplata;,Sheet,Colum:Variant;

index:integer;

Процедура вывода записей в Excel

Данные из файла выводятся в таблицу. Для
распечатки таблицы потребуется принтер.

procedure Action3Execute(Sender:
TObject);

Процедура печати.
Для
распечатки
необходим
принтер.Action4Execute(Sender:
TObject);

Выход из
программы.Action5Execute(Sender:
TObject);:file of tzarplata;:tzarplata;,tn1,i:integer;:boolean;

Процедура добавления записи

Данные из однострочных полей редактирования
добавляются в файл и отображаются в текстовом редакторе. После добавления
записи однострочные поля очищаются. Перед добавлением выполняется проверка —
если табельный номер уже существует в файле, то выдается сообщение об ошибке.

procedure Action6Execute(Sender:
TObject);:file of tzarplata;:tzarplata;

Процедура просмотра содержимого файла

procedure Action7Execute(Sender:
TObject);

Процедура очистки текстового
редактораAction8Execute(Sender:
TObject);:string;:boolean;,k:integer;:file of tzarplata;:tzarplata;:array
of tzarplata;

Процедура поиска записей. Предусмотрена
возможность поиска записей по табельному номеру, по подразделению или по
должности в зависимости от установленного переключателя. Найденные записи
отображаются в редакторе.

procedure Action9Execute(Sender:
TObject);

Вызов справкиAction10Execute(Sender:
TObject);

Вызов формы
«О
программе»

Программные коды модулей

unit
Unit1;

interface, ShellAPI,
…;=record:word;:word;:string[80];:string[25];:string[25];:real;:word;:Real;:Real;:Real;;=
class(TForm)FormCreate(Sender: TObject);Action1Execute(Sender:
TObject);Action5Execute(Sender: TObject);Action6Execute(Sender:
TObject);Action7Execute(Sender: TObject);Action4Execute(Sender:
TObject);Action3Execute(Sender: TObject);Action8Execute(Sender:
TObject);Action2Execute(Sender: TObject);Action10Execute(Sender:
TObject);Action9Execute(Sender: TObject);

{ Private declarations }

{ Public declarations };:file of
tzarplata;:tzarplata;:array of tzarplata;:integer;: TForm1;Unit2;

{$R *.dfm}TForm1.FormCreate(Sender:
TObject);

RichEdit1.Clear;//очистка
текстового редактора

end;TForm1.Action1Execute(Sender:
TObject);

{процедура
открытия
файла}.Clear;

assignfile(f,’C:Zarplata.dat’); //связываем
файловую переменную с именем файлаFileExists(‘C:Zarplata.dat’) //защищённый
блок для открытия файла

then reset(f)rewrite(f);(f,0);not
eof(f) do//цикл пока
не
конец
файла

read(f,w); {читаем данные из файла в переменную
w}

//выводим содержимое переменной в текстовый
редактор

RichEdit1.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(w.nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(w.tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+w.fio);.Lines.Add(‘Подразделение……….’+w.podrazdelenie);.Lines.Add(‘Должность…………..’+w.dolgnost);.Lines.Add(‘Оклад………………’+floattostr(w.oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(w.premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(w.udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(w.sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(w.sumkv));.Items.Add(inttostr(w.tabnom));;(f,filesize(f));{устанавливаем
фокус
ввода
в
конец
файла};TForm1.Action5Execute(Sender:
TObject);

{процедура добавления записи},tn1,i:integer;

fl:boolean;(f,’C:Zarplata.dat’);(f);:=strtoint(edit2.Text);:=false;i:=0
to combobox3.items.count-1 do:=strtoint(combobox3.Items[i]);tn=tn1 then
fl:=true;;fl then(‘Такой номер
есть’);.SetFocus;;(f,filesize(f));{устанавливаем
фокус
ввода
в
конец
файла}

//в переменную w
записываем данные из полей редактирования

w.nommes:=strtoint(Edit1.text);.tabnom:=strtoint(Edit2.text);.fio:=Edit3.Text;.podrazdelenie:=ComboBox1.Text;.dolgnost:=ComboBox2.Text;.oklad:=strtofloat(Edit4.text);.premij:=
strtoint(Edit5.text);.udergano:= strtofloat(edit6.text);.sumprem:=
w.oklad*w.premij/100;.sumkv:= w.oklad+w.sumprem-w.udergano;1.Clear;

//обображаем записи в текстовом редакторе

RichEdit1.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(w.nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(w.tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+w.fio);.Lines.Add(‘Подразделение……….’+w.podrazdelenie);.Lines.Add(‘Должность…………..’+w.dolgnost);.Lines.Add(‘Оклад………………’+floattostr(w.oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(w.premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(w.udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(w.sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(w.sumkv));

write(f,w); {записываем данные из переменной w в
файл}

//очищаем однострочные поля редактирования

edit1.Text:=»;

edit2.Text:=»;.Text:=»;.Text:=»;.Text:=»;.Text:=»;.SetFocus;;TForm1.Action6Execute(Sender:
TObject);

{процедура просмотра содержимого файла}.Clear;

assignfile(f,’C:Zarplata.dat’);(f);(f,0);not
eof(f) do

begin(f,w); {читаем данные из файла в переменную
w и отображаем их в редакторе}

RichEdit1.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(w.nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(w.tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+w.fio);.Lines.Add(‘Подразделение……….’+w.podrazdelenie);.Lines.Add(‘Должность…………..’+w.dolgnost);.Lines.Add(‘Оклад………………’+floattostr(w.oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(w.premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(w.udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(w.sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(w.sumkv));;;TForm1.Action7Execute(Sender:
TObject);

{процедура
очистки
RichEdit1}.Clear;;TForm1.Action4Execute(Sender: TObject);

//выход из программы(f);

close;;TForm1.Action3Execute(Sender:
TObject);

{процедура
печати}.Print(Text);;TForm1.Action8Execute(Sender:
TObject);

{процедура поиска записей}:string;

poisk:boolean;,k:integer;.Clear;(f,’C:Zarplata.dat’);(f);(a,filesize(f));radiobutton1.Checked
then:=combobox3.Text;:=0;:=false;not eof(f) do {пока
не
конец
файла}

begin(f,w); {читаем из файла в файловую
переменную}

if pos(maska,inttostr(w.tabnom))=1
then

begin[k]:=w; {записываем в массив данные из w}

inc(k);:=true;;;(f);not poisk then
showmessage(‘Записей образца
‘+maska+’ не обнаружено’)

{если не найден не один элемент выводим соответствующее
сообщение}

elsei:=0 to k-1 do {в
ячейки
выводим
записи
массива
а}.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(a[i].nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(a[i].tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+a[i].fio);.Lines.Add(‘Подразделение……….’+a[i].podrazdelenie);.Lines.Add(‘Должность…………..’+a[i].dolgnost);.Lines.Add(‘Оклад………………’+floattostr(a[i].oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(a[i].premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(a[i].udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(a[i].sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(a[i].sumkv));;;;radiobutton2.Checked
then:=edit7.Text;:=0;:=false;not eof(f) do {пока
не
конец
файла}

begin(f,w); {читаем из файла в файловую
переменную}

if pos(maska,w.podrazdelenie)=1 then

begin[k]:=w; {записываем в массив данные из w}

inc(k);:=true;;;(f);not poisk then
showmessage(‘Записей образца
‘+maska+’ не обнаружено’)

{если не найден не один элемент выводим
соответствующее сообщение}

elsei:=0 to k-1 do {в
ячейки
выводим
записи
массива
а}.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(a[i].nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(a[i].tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+a[i].fio);.Lines.Add(‘Подразделение……….’+a[i].podrazdelenie);.Lines.Add(‘Должность…………..’+a[i].dolgnost);.Lines.Add(‘Оклад………………’+floattostr(a[i].oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(a[i].premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(a[i].udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(a[i].sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(a[i].sumkv));;;;radiobutton3.Checked
then:=edit7.Text;:=0;:=false;not eof(f) do {пока
не
конец
файла}

begin(f,w); {читаем из файла в файловую
переменную}

if pos(maska,w.dolgnost)=1 then

begin[k]:=w; {записываем в массив данные из w}

inc(k);:=true;;;(f);not poisk then
showmessage(‘Записей образца
‘+maska+’ не обнаружено’)

{если не найден не один элемент выводим
соответствующее сообщение}

elsei:=0 to k-1 do {в
ячейки
выводим
записи
массива
а}.Lines.Add(‘_____________________________________’);.Lines.Add(‘Номер
месяца………..’+inttostr(a[i].nommes));.Lines.Add(‘Табельный
номер……..’+inttostr(a[i].tabnom));.Lines.Add(‘Фамилия
Имя
Отчество…’+a[i].fio);.Lines.Add(‘Подразделение……….’+a[i].podrazdelenie);.Lines.Add(‘Должность…………..’+a[i].dolgnost);.Lines.Add(‘Оклад………………’+floattostr(a[i].oklad));.Lines.Add(‘Премия

% до
100)….’+inttostr(a[i].premij));.Lines.Add(‘Удержано
из
зарплаты…’+floattostr(a[i].udergano));.Lines.Add(‘Сумма
премии………..’+floattostr(a[i].sumprem));.Lines.Add(‘Сумма
к
выдаче………’+floattostr(a[i].sumkv));;;;;TForm1.Action2Execute(Sender:
TObject);

{процедура вывода записей в Excel}

var,Sheet,Colum:Variant;:integer;:=CreateOleObject(‘Excel.Application’);.Visible:=true;.Workbooks.Add(-4167);.Workbooks[1].workSheets[1].Name:=’Отчёт’;:=
XLApp.Workbooks[1].workSheets[‘Отчёт’].Columns;.Columns[1].ColumnWidth:=20;.Columns[2].ColumnWidth:=20;.Columns[3].ColumnWidth:=20;.Columns[4].ColumnWidth:=20;.Columns[5].ColumnWidth:=20;.Columns[6].ColumnWidth:=20;.Columns[7].ColumnWidth:=20;.Columns[8].ColumnWidth:=20;.Columns[9].ColumnWidth:=20;.Columns[10].ColumnWidth:=20;:=
XLApp.Workbooks[1].workSheets[‘Отчёт’].Rows;.Rows[2].Font.Bold:=true;.Rows[1].Font.Bold:=true;.Rows[1].Font.Color:=clBlue;.Rows[1].Font.Size:=14;:=XLApp.Workbooks[1].WorkSheets[‘Отчёт’];.Cells[1,2]:=’Ведомость’;.Cells[2,1]:=’Номер
месяца’;.Cells[2,2]:=’Табельный
номер’;.Cells[2,3]:=’Фамилия,
имя,
отчество’;.Cells[2,4]:=’Подразделение’;.Cells[2,5]:=’Должность’;.Cells[2,6]:=’Оклад’;.Cells[2,7]:=’Премия

% до
100)’;

Sheet.Cells[2,8]:=’Удержано из
зарплаты’;.Cells[2,9]:=’Сумма премии’;.Cells[2,10]:=’Сумма к выдаче’;

assignfile(f,’C:Zarplata.dat’);(f);:=3;not
eof(f) do

begin(f,w); {читаем данные из файла в переменную
w}

sheet.cells[index,1]:=inttostr(w.nommes);.cells[index,2]:=inttostr(w.tabnom);.cells[index,3]:=w.fio;.cells[index,4]:=w.podrazdelenie;.cells[index,5]:=w.dolgnost;.cells[index,6]:=floattostr(w.oklad);.cells[index,7]:=inttostr(w.premij);.cells[index,8]:=floattostr(w.udergano);.cells[index,9]:=floattostr(w.sumprem);.cells[index,10]:=floattostr(w.sumkv);(index);;;.Action10Execute(Sender:
TObject);

//вызов формы «О программе».showmodal;

end;TForm1.Action9Execute(Sender:
TObject);

//вызов
справки(Handle,’open’,’D:знаменский
курсоваяspravka.htm’,nil,nil,sw_restore);

end;.

Инструкция по работе с программой

Общие сведения.

Функциональное назначение.

Приложение «Зарплата» предназначено для
автоматизации расчета заработной платы бухгалтерией предприятия (предусмотрена
возможность добавления записей, формирования расчетных листков на каждого
сотрудника, вывода итоговой ведомости в Excel).
Также с помощью этой программы можно осуществить поиск сведений о заработной
плате сотрудников по подразделению, по должности или табельному номеру.
Предусмотрена возможность вывода данных на печать.

Описание логической структуры.

Данная программа реализует следующие алгоритмы:

·        Открытие файла — проверяется
существование файла и в зависимости от его существования, открывается файл тем
или иным способом. Все табельные номера переписываются в раскрывающийся список;

·        Добавление данных в файл из полей
ввода и раскрывающихся списков, расчет необходимых сумм и отображение записи в
редакторе. Одновременно новый табельный номер запоминается в списке табельных
номеров. Если такой номер уже есть в списке, то запись игнорируется, выводится
сообщение о неверном табельном номере и курсор возвращается к вводу информации;

·        Вывод расчетных листков —
формируются расчетные листки и выводятся в редактор;

·        Поиск — по выбору пользователя. Если
пользователь выбрал варианты «По подразделению» или «По должности»
осуществляется поиск по образцу, взятому из поля ввода в панели «Поиск».
Результаты поиска отображаются в редакторе. Если пользователь выбрал вариант
«По табельному номеру», то осуществляется поиск информации из файла по
выбранному табельному номеру и в предварительно очищенном редакторе выводится
расчетный лист с показом всех причитающихся данному лицу выплат и суммы «К
выдаче»;

·        Печать — данные из редактора
выводятся на печать;

·        Экспорт в Ехсеl
— данные из файла выводятся в виде книги Excel

·        Очистить — данные из редактора
удаляются;

·        Закрыть — закрытие файла и
корректное завершение работы.

·        О программе — вывод на экран формы,
содержащей сведения о программе и её авторе.

·        Справка — вывод справки.

Для работы программы необходимы следующие
технические средства:

·          Процессор: класс Pentium.

·        RAM: 64 Мбайт.

·        Память на жёстком диске: не менее 10
Мбайт.

·        Video: 800*600 при
256-цветовой палитре.

Для печати данных необходим принтер.

Вызов и загрузка.

Перед запуском программы необходимо скопировать
папку «Зарплата» с лазерного диска в любое место на жёстком диске. Для вызова
программы необходимо запустить файл Project1.exe.
После первого запуска программы на диске «С» появится файл «Zarplata.dat»,
в котором и будет храниться вся информация об имеющихся книгах.

Используемая оперативная память — 3580 Кб, объём
программы — 686 Кб.

Входные данные

Исходные данные могут вводиться пользователем в
однострочные поля редактирования. В поля подразделение и должность выбираются
значения из раскрывающихся списков. Все поля имеют числовой формат, кроме полей
Фамилия, подразделение, должность (эти поля символьного типа).

Выходные данные.

Выходные данные могут быть представлены в
текстовом редакторе или выведены на печать. Ведомость может быть сформирована в
excel.

Описание пользовательского интерфейса.

В данном приложении реализован интерфейс MS
Word. Т.е. одно и то же
действие пользователь сможет выполнить, как выбрав команду меню, так и щелкнув
кнопку на панели инструментов.

При запуске приложения на экран выводится форма,
показанная на рисунке 3.

Рис. 3. Вид главного окна приложения

Меню программы содержит следующие пункты:

·        Файл/Открыть после выбора данного
пункта меню все записи из файла «С:Zarplata.dat»
будут представлены в текстовом редакторе. Пример показан на рисунке 4.

Рис. 4. Вид окна приложения после команды
«Открыть»

·        Файл/Экспорт в Excel
— после выполнения данного пункта все записи из файла будут перенесены в
ведомость Excel (рисунок
5).

Рис. 5. Ведомость формируемая в Excel

·        Файл/Печать — данные представленные
в текстовом редакторе будут выведены на печать.

·        Файл/Выход — корректное завершение
работы программы.

·        Действия/Добавить запись — данные из
однострочных полей будут добавлены в конец файла и отображены в текстовом
редакторе. Пример представлен на рисунке 6.

Рис. 6. Добавление записи

·        Действия /Вывести расчетные листки —
данные о всех сотрудниках, с рассчитанными суммами выплат выводятся в текстовый
редактор (рисунок 7).

Рис. 7. Вывод расчетных листов

·        Действия/Очистить — по нажатии на
эту кнопку текстовый редактор очищается.

·        Поиск — перед выполнением этой
команды пользователю необходимо указать вариант поиска (по подразделению,
должности или табельному номеру) и ввести искомое значение в разделе «Поиск».
Пример показан на рисунке 8.

Рис. 8. Пример поиска по табельному номеру

·        Помощь/Справка — вызывается документ
«D:spravka.htm»,
которой содержит подробную инструкцию по работе с программой (рисунок 9).

Рис. 9. Вид окна «Справка»

·        Помощь/О программе — на экран будет
выведена форма, содержащая основные сведения о программе и её авторе.

Те же самые действия можно выполнить, нажав
соответствующие кнопки на панели инструментов (Открыть, экспорт в Excel
и др.).

Сообщения пользователю.

На экран могут быть выведены сообщения «Такой
номер уже есть», если при добавлении в файл новой записи, табельный номер
совпадет с уже существующем номером в файле (рисунок 10).

Рис. 10. Сообщение о совпадении номера

Также при выполнении поиска, в случае если
запись отсутствует в файле, то будет выведено сообщение об ошибке (Рисунок 11).

Рис. 11. Сообщение об ошибке

Заключение

В ходе выполнения данной курсовой работы мною
было создано приложение «Зарплата» предназначено для автоматизации расчета
заработной платы бухгалтерией предприятия (предусмотрена возможность добавления
записей, формирования расчетных листков на каждого сотрудника, вывода итоговой
ведомости в Excel). Также с
помощью этой программы можно осуществить поиск сведений о заработной плате
сотрудников по подразделению, по должности или табельному номеру. Предусмотрена
возможность вывода данных на печать.

В дальнейшем, для усовершенствования программы,
может быть изменен её внешний дизайн, а также не исключены небольшие доработки
для удобства работы конкретного пользователя.

Я получил и закрепил навыки работы с языком
программирования Delphi
7. Мною были использованы поиск по маске и другие методы работы с данными
хранящимися в динамическом массиве записей. Также я изучил новые для меня
компоненты, такие как TToolBar, TToolButton, и другие,
используемые для создания интерфейса в стиле MS
Word. Также был изучен порядок экспорта
данных в Excel.

Навыки, полученные при выполнении курсовой
работы помогут в моей дальнейшей профессиональной деятельности.

Список литературы

1.Фаронов
В.В. Delphi. Программирование на языке высокого уровня. — «М.:Питер», 2004.

.Баженова
Ю.И. Delphi 7. Самоучитель программиста — «КУДИЦ-Образ», 2003

.Онлайн
Учебник по Microsoft Excel — #»587515.files/image024.gif»>

Рис. 5. Ведомость формируемая в Excel

Рис. 6. Добавление записи

Рис. 8. Пример поиска по табельному номеру

Рис. 8. Пример поиска по табельному номеру

Рис. 8. Пример поиска по табельному номеру

Похожие работы на — Обзор компонентов Delphi, используемых при разработке интерфейса в стиле MS WORD

Собранные версии компонента с примерами использования

Архив на Яндекс.Диск

Файлы в архиве

Файлы для Delphi 7

  • ОписаниеРазработки.txt — этот файл.
  • WordReport70.zip — исполняемые файлы и ресурсы компонента.
  • WR_ExampleD7.zip — пример применения компонента.
  • WordReport70src.zip — исходные коды компонента.

Файлы для Delphi XE3

  • ОписаниеРазработки.txt — этот файл.
  • WordReport170.zip — исполняемые файлы и ресурсы компонента.
  • WordReport170src.zip — исходные коды компонента.
  • WR_ExampleDXE3.zip — пример применения компонента.

Назначение

Компонент предназначен для автоматизации создания отчетов через MS Word.
Как исходный шаблон, так и готовый отчет представляют собой обычные документы Word, что обеспечивает пользователю самыме богатые возможности редактирования, предпросмотр и печать без каких-либо дополнительных средств.

Программные требования

  • Borland Delphi или Embarcadero RAD Studio XE3.
  • Microsoft Word 2000 и выше.

Установка

  1. Извлечь файлы из WordReport(Version).zip в директорию с установленной Delphi (например, WordReport70.zip в «C:Program Files (x86)BorlandDelphi7»).
  2. Запустить Delphi.
  3. Выбрать пункт меню Component >> Install Packages…
  4. Нажать кнопку Add… и выбрать файл WordReport(Version).bpl в DelphiBin (например, WordReport70.bpl в «C:Program Files (x86)BorlandDelphi7BinWordReport70.bpl»)
  5. Компонент готов к работе. Его можно найти на вкладке WordReport.

Инструкция

Правила создания шаблонов

Шаблон в нашем случае — это документ MS Word (именно документ — т.е. файл *.doc, а не *.dot !), составленный по определенным правилам.

  • Секция — это диапазон шаблона, который должен повторяться в результирующем документе столько раз, сколько требуется для вывода всех записей привязанного к секции набора данных.

  • Каждая секция должна быть отмечена закладкой с именем DataN, где N — целое число от 1 до 8.
    Повторяться будет ТОЛЬКО то, что в диапазоне закладки, поэтому закладкой лучше отмечать всю строку документа целиком. Если секция используется
    для повторения строки таблицы, то отмечать закладкой следует также всю строку документа, в которой находится эта строка таблицы.

  • Существует три категории переменных шаблона:

  1. переменные вне секций

    Синтаксис объявления: #(ИмяСвободнойПеременной)
    Способ определения значения: напрямую, методом SetValue

  2. переменные секций

    Синтаксис объявления: #(ИмяСекции(ИмяСчетчика).ИмяПеременной)
    Способ определения значения: из текущей записи привязанного поля набора данных.

  3. счетчики записей секций

    Синтаксис объявления: #(ИмяСчетчика)
    Объявление действительно только внутри секции.
    Заменяется на текущий номер записи привязанного набора данных при отсутствии групп секций
    или на номер записи в неразвывной последовательности при группировке секций.

  • ИмяСвободнойПеременной — ненулевая последовательность латинских букв, цифр и точек (только букв, цифр и точек, никаких других знаков!). Регистр букв не важен.

  • ИмяПеременной — ненулевая последовательность латинских букв и цифр. Регистр букв не важен.

  • ИмяСчетчика — ненулевая последовательность латинских букв и цифр. Регистр букв не важен.

  • ИмяСекции — ненулевая последовательность латинских букв и цифр. Регистр букв не важен.

  • Максимальное количество переменных в секции — 16.

  • Максимальное количество секций в документе — 8.

  • Максимальное количество переменных вне секций — 2^31 — 1, то есть верхняя граница 32-битного целого типа.

Описание функционала компонента

Свойства времени разработки

Имя документа, содержащего шаблон

TemplateDocFileName: string

Имя документа, в котором следует сохранить готовый отчет

ResultDocFileName: string

Показать MS Word c готовым отчетом при вызове Quit

ShowResult: boolean

Свойства времени выполнения

Массив секций документа.
Доступ по имени секции.
Если секция не найдена — возвращает nil.

Bands[Name:string]: TDataBand

Количество секций документа.

BandCount: integer

Методы

Существует ли в шаблоне секция с именем BandName.

function BandExists(BandName: string): boolean;

Сохранить документ в файле FileName.

procedure SaveToFile(FileName: string);

Выйти. Завершает процесс MS Word или показывает готовый документ.

procedure Quit;

Сформировать отчет. Выполняет все операции для формирования одного отчета, сохраняет и закрывает полученный документ.
Однако, сам Word остается запущенным для формирования следующих отчетов.

procedure Build;

Установить значение свободной переменной.

procedure SetValue(VariableName:string; Value:Variant);

Связать две соседние секции вместе
так чтобы они чередуясь выводили записи из одного и того же набора данных (НД).
Однако, для этого требуется указать целочисленное поле в НД,
значение которого и будет определять, какую именно секцию использовать для вывода текущей записи.

procedure JoinBands(BandKeyField:string; BandName1:string; KeyValue1:integer; BandName2:string; KeyValue2:integer);

События

Событие наступает после прочтения структуры документа-шаблона,
т.е. тогда, когда имена всех секций (bands) и переменных уже определены, но
этим переменным еще не установлены значения или поля набора данных (НД).

OnReadMaket:TNotifyEvent;

Объект секции документа (TDataBand)

Свойства времени выполнения

Имя секции документа.

Name: string

Имя поля для переменной VarName.

Field[VarName:string]: string

Формат вывода переменной.

Format[VarName:string]: string

Методы

Подключить набор данных к секции.
Параметром служит указатель на TDataset, т.е. вызов производится так:
AssignDataSet(@IBQuery1) или AssignDataSet(@ADOTable1).

procedure AssignDataSet(aDataSet: PDataSet);

Установить переменной VariableName из секции поле FieldName набора данных, подключенного к этой секции.
Если поле содержит действительные числа, то лучше использовать маску формата для их отображения,
например %10.2f (полный список форматов см. в описании функции SysUtils.Format).
Во всех других случаях значение параметра формат можно оставить пустой строкой, т.к. это ни на что не повлияет

procedure SetField(VariableName,FieldName,Format:string);

Обработка события OnReadMaket

Так как каждый шаблон уникален и содержит свой неповторимый набор секций и переменных, то и связывание этих секций и переменных со своими
значениями также процесс уникальный, а потому не может быть до конца автоматизирован внутри самого компонента. Эту задачу предстоит решить пользователю компонента.

Специально для этой цели и было создано данное событие.
В обработчике этого события НЕОБХОДИМО произвести связывание:

  • имен переменных с их значениями (TWordReport.SetValue),
  • секций с их заполненными наборами данных (TDataBand.AssignDataset),
  • переменных в секции с их полями (TDataBand.SetField),
  • а также, если это нужно — формирование групп секций (TWordReport.JoinBands)

Подробнее об этом в примере приложения.

Иные версии Delphi

Если нужен компонент для другой версии Delphi — используйте исходные коды, чтобы собрать пакет на своей Delphi, а затем скопируйте его:

  1. 32-битную release версию bpl — в поддиректорию bin
  2. 64-битную release bpl — в bin64
  3. 32-битную release версию dcu вместе с файлами WordReport.dcr и wrtprogress.dfm в libwin32release.
  4. 64-битную release версию dcu вместе с файлами WordReport.dcr и wrtprogress.dfm в libwin64release.
  5. Отладочные DCU, если они нужны, копируются в libwin32debug и libwin64debug уже без файлов ресурсов.

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;

Понравилась статья? Поделить с друзьями:
  • Компьютерная программа excel что это
  • Комплектовочная ведомость образец гост excel
  • Компьютерная программа excel обучение для начинающих
  • Комплект word для windows 10
  • Компьютерная обработка социометрии в excel