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 – Пример сформированного документа