Private void NumbersButton_Click(object sender, EventArgs e)

{

//создаем новый документ на основе шаблона

OpenDocument("список.doc");

//заменяем метку <Today> на текущую дату

ReplaceText("<Today>", DateTime.Today.ToShortDateString());

//задаем параметры для поиска метки <Table>

Object start = 0;

Object end = wordDoc.Characters.Count;

//диапазон поиска - весь документ

Microsoft.Office.Interop.Word.Range rng = wordDoc.Range(ref start, ref end);

rng.TextRetrievalMode.IncludeHiddenText = false;

rng.TextRetrievalMode.IncludeFieldCodes = false;

string metka = "<Table>";

//ищем в документе метку <Table>

int beginphrase = rng.Text.IndexOf(metka);

//получаем "координаты" начала и конца метки в документе

start = beginphrase;

end = beginphrase + metka.Length;

//если метка <Table> найдена

if (beginphrase != -1)

{

//то удаляем ее

rng = wordDoc.Range(ref start, ref end);

rng.Text = "";

//и вставляем на ее место таблицу

Object defaultTableBehavior = Type.Missing;

Object autoFitBehavior = Type.Missing;

//создаем объект таблицы (изначально - только шапка)

Microsoft.Office.Interop. Word.Table tbl = rng.Tables.Add(rng, 1, 3, ref defaultTableBehavior, ref autoFitBehavior);

//Форматируем таблицу и применяем стиль

tbl.Range.Font.Size = 14;

Object style = "Сетка таблицы";

tbl.set_Style(ref style);

//шапка таблицы

tbl.Cell(1, 1).Range.Text = "№пп";

tbl.Cell(1, 2).Range.Text = "ФИО";

tbl.Cell(1, 3).Range.Text = "Номер телефона";

//i - общее количество строк в формируемой таблице

int i = 0;

//перебираем всех людей из таблицы БД Contacts

Foreach (DataRow row in dataSet11.Contacts)

{

//для каждой записи получаем дочерние строки из

// таблицы Phones с номерами телефонов

DataRow[] phones = row.GetChildRows (dataSet11.Relations ["FK_Contacts_Phones"]);

//если количество телефонов > 1

if (phones.Length > 1)

{

//то получаем ФИО этого человека

string FIO = row["Fam"].ToString() + " " + row["Name"].ToString();

//перебираем все его телефоны

Foreach (DataRow phone in phones)

{

i++;

//добавляем в таблицу документа новую строку

Object beforeRow = Type.Missing;

tbl.Rows.Add(ref beforeRow);

//и заполняем ее столбцы

tbl.Cell(i + 1,1).Range.Text = i.ToString();

tbl.Cell(i + 1,2).Range.Text = FIO;

tbl.Cell(i + 1,3).Range.Text = phone["Phone"]. ToString();

}

}

}

//шапку таблицы выделяем курсивом

tbl.Rows[1].Range.Font.Italic = 1;

//и устанавливаем выравнивание по центру

tbl.Rows[1].Range.ParagraphFormat.Alignment = Word. WdParagraphAlignment.wdAlignParagraphCenter;

}

Else

ReplaceText("Table", "");

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

wordApp.Visible = true;

}

 

Пример сформированного программой документа показан на рисунке 4.6:

Рисунок 4.6 – Пример сформированного документа