Вторник, 21.11.2017, 09:11
Приветствую Вас Гость | RSS

DELPHI Report

Каталог статей Delphi Report

Главная » Статьи » MS Office (MS Word, MS Excel ) » MS Word

4.2 Шаблоны и отчёты MS Word (продолжение)

Обычно во время формирования таблицы мы не знаем, сколько будет строк. Они могут добавляться в конец или вставляться в середину таблицы. Если для формирования документа мы используем шаблон таблицы и в нем уже есть, например, заголовок, то нам не обойтись без процедур добавления или вставления строк. Добавить строку в конец таблицы можно, используя метод Add коллекции Rows. Чтобы это сделать из приложения на Delphi, достаточно создать и использовать функцию. Определим ее как AddRowTableDoc.

Code:

Function AddRowTableDoc (table_:integer):boolean;

begin

AddRowTableDoc:=true;

try

W.ActiveDocument.Tables.Item(table_).Rows.Add;

except

AddRowTableDoc:=false;

end;

End;

 

 

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

Code:

Function InsertRowsTableDoc(table_,position_,

count_:integer): boolean;

begin

InsertRowsTableDoc:=true;

try

W.ActiveDocument.Tables.Item(table_).Rows.Item(position_).Select;

W.Selection.InsertRows (count_);

except

InsertRowsTableDoc:=false;

end;

End;

 

Для добавления одной строки можно использовать также и метод Add коллекции Rows, но с параметром, в качестве которого выступает ссылка на строку, перед которой необходимо вставить новую. Первый оператор получает ссылку на строку, второй вставляет новую. Смотрите реализацию на Delphi (InsertRowTableDoc).

Code:

Function InsertRowTableDoc(table_,position_: integer):boolean;

var row_:variant;

begin

InsertRowTableDoc:=true;

try

row_:=W.ActiveDocument.Tables.Item(table_).Rows.Item(position_);

W.ActiveDocument.Tables.Item(table_).Rows.Add(row_);

except

InsertRowTableDoc:=false;

end;

End;

 

Когда мы в своем распоряжении имеем набор функций для изменения таблицы, можно приступать к решению задачи - созданию документа типа счета-фактуры на базе шаблона. Полный исходный текст и полную версию шаблона счета-фактуры можно скачать по адресу http://www.delphi.ucoz.org/MSOffice/st1_4.zip. Здесь мы рассмотрим фрагмент данного документа. Создадим шаблон - документ формата DOC - и разместим его на диске в каталоге нашего проекта. Внешний вид шаблона смотрите на рисунке.

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

Code:

procedure TForm1.Button1Click(Sender: TObject);

var tablica_:integer;

    col_,row_:integer;

    a_:integer;

    metki_:array[1..12] of record

     col:integer;

     row:integer;

     metka:string;

    end;

   tovar:array[1..2,1..12] of variant;

begin

// Заполняем массив данными. Массив используется

//для простоты демонстрации, в реальной программе

//данные берутся из базы данных.

tovar[1,1]:='Стул офисный'; tovar[1,2]:='шт.';

tovar[1,3]:=2; tovar[1,4]:=520.00; tovar[1,5]:=1040.00;

tovar[1,6]:='-'; tovar[1,7]:=20; tovar[1,8]:=208.0;

tovar[1,9]:=1248.00; tovar[1,10]:=62.40;

tovar[1,11]:='Россия'; tovar[1,12]:='-';

tovar[2,1]:='Телефон'; tovar[2,2]:='шт.';

tovar[2,3]:=3; tovar[2,4]:=315.25; tovar[2,5]:=945.75;

tovar[2,6]:='-'; tovar[2,7]:=20; tovar[2,8]:=189.15;

tovar[2,9]:=1134.90; tovar[2,10]:=56.70;

tovar[2,11]:='Беларусь'; tovar[2,12]:='-';

if CreateWord then begin

VisibleWord(true);

If OpenDoc(ExtractFileDir (application.ExeName) +'\sf.doc')

then begin

tablica_:=1;

for a_:=1 to 12 do begin

  StartOfDoc;

  if FindTextDoc('###M'+inttostr(a_)+'&') then

   if GetSelectionTable then begin

    messagebox(handle,'Находимся в таблице, запоминаем

     метку(переменную), номер колонки и строки!',

     pchar('Номер колонки/строки = '+inttostr(col_)+'/'+inttostr(row_)),0);

    metki_[a_].col:=col_;

    metki_[a_].row:=row_;

    metki_[a_].metka:='###M'+inttostr(a_)+'&';

   end;

  end;

  Messagebox(handle,'Заполняем первую строку','',0);

  for a_:=1 to 12 do begin

   SetTextToTable(tablica_,metki_[a_].row,metki_[a_].col,tovar[1,a_]);

  end;

  a_:=1;

  Messagebox(handle,'Добавляем строку','',0);

  InsertRowTableDoc(tablica_, metki_[a_].row);

  Messagebox(handle,'Заполняем вторую строку','',0);

  for a_:=1 to 12 do begin

   SetTextToTable(tablica_,metki_[a_].row,metki_[a_].col,tovar[2,a_]);

  end;

  SaveDocAs(ExtractFileDir(application.ExeName)+'\Счет - фактура.doc');

  Messagebox(handle,'Текст сохранен','',0);

  CloseDoc;

end;

Messagebox(handle,' Текст закрыт','',0);

CloseWord;

end;

end;

 

Мы сформировали фрагмент сложного документа, но вы, возможно, захотите в дальнейшем сами развивать эту тему и использовать все возможности Word.Application. В следующей части я постараюсь на примерах объяснить, каким образом это сделать

Василий КОРНЯКОВ

Литература: Н. Елманова, С. Трепалин, А. Тенцер "Delphi 6 и технология COM" "Питер" 2002.

 

Категория: MS Word | Добавил: delphi (29.08.2008)
Просмотров: 4329 | Комментарии: 2 | Рейтинг: 4.0/3
Всего комментариев: 2
1  
очень жаль, что нет примера с базой

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта
Google
Форма входа
Категории раздела
MS Excel [22]MS Word [18]
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2017