//объект приложения. Microsoft.Office.Interop.Excel.Application ExcelApp;. //объект окна Excel. Microsoft.Office.Interop.Excel.Window ExcelWindow;
//объект приложения Microsoft. Office. Interop. Excel. Application ExcelApp; //объект окна Excel Microsoft. Office. Interop. Excel. Window ExcelWindow; //объект рабочей книги Microsoft. Office. Interop. Excel. Workbook WorkBook; //набор листов Excel Microsoft. Office. Interop. Excel. Sheets ExcelSheets; //объект рабочего листа Microsoft. Office. Interop. Excel. Worksheet WorkSheet; //диапазон ячеек Microsoft. Office. Interop. Excel. Range range;
Для создания нового отчета в Excel на основе заданного шаблона опишем метод OpenExcelDocument. Имя файла шаблона передается функции в качестве параметра. Текст метода:
private void OpenExcelDocument(string FileName) { //создать новый объект приложения Excel ExcelApp = new Microsoft. Office. Interop. Excel. Application(); //задать файл шаблона object template = System. Windows. Forms. Application. StartupPath + @" \reports\" + FileName; //применить шаблон ExcelApp. Workbooks. Add(template); //получить первую рабочую книгу файла WorkBook = ExcelApp. Workbooks[1]; //получить список листов рабочей книги ExcelSheets = WorkBook. Worksheets; //выбрать первый лист WorkSheet = (Microsoft. Office. Interop. Excel. Worksheet) ExcelSheets. get_Item(1); }
Следующие два метода предназначены занесения данных в ячейки Excel. В качестве параметров им передаются имя ячейки и значение в формате строки, которое нужно записать в ячейку. Функция PutCellBorder дополнительно рисует тонкую рамку вокруг выбранной ячейки.
private void PutCell(string cell, string val) { //получить диапазон, соответствующий выбранной ячейке range = WorkSheet. get_Range(cell, Type. Missing); //занести в ячейку значение range. Value2 = val; } private void PutCellBorder(string cell, string val) { //вызвать функцию занесения в ячейку значения
PutCell(cell, val); //нарисовать границу вокруг ячейки range. BorderAround (Microsoft. Office. Interop. Excel. XlLineStyle. xlContinuous, Microsoft. Office. Interop. Excel. XlBorderWeight. xlThin, Microsoft. Office. Interop. Excel. XlColorIndex. xlColorIndexAutomatic, Type. Missing); }
Для запуска процесса формирования списка поместите на главную форму программы кнопку «Список в Excel». Текст ее обработчика с комментариями приведен ниже:
private void ExcelButton_Click(object sender, EventArgs e) { //создать документ на основе шаблона OpenExcelDocument(" spisok. xlsx" ); //занести текущую дату в ячейку D1 PutCell(" D1", DateTime. Now. ToShortDateString());
//i - порядковый номер записи int i = 1; //просмотреть все строки таблицы Phones foreach (DataRow row in dataSet1. Phones) { //занести в столбец А порядковый номер записи PutCellBorder(" A" + (i + 5). ToString(), i. ToString()); //получить строку из родительской таблицы Contacts DataRow contact = row. GetParentRow(dataSet1. Relations [" FK_Contacts_Phones" ]); //занести в столбец B фамилию абонента PutCellBorder(" B" + (i + 5). ToString(), contact[" Fam" ]. ToString()); //занести в столбец C имя абонента PutCellBorder(" C" + (i + 5). ToString(), contact[" Name" ]. ToString()); //занести в столбец D номер телефона PutCellBorder(" D" + (i + 5). ToString(), row[" Phone" ]. ToString()); i++; }
//сделать приложение Excel видимым ExcelApp. Visible = true; } Внешний вид сформированного программой списка будет выглядеть примерно так (рисунок 4. 3):
Рисунок 4. 3 – Внешний вид сформированного в Excel отчета
В данном отчете просто отображаются все номера телефонов из справочника. Модифицируем процесс его формирования так, чтобы имелась возможность их группировки по фамилиям людей (рисунок 4. 4).
Рисунок 4. 4 – Отчет с группировкой данных
Для реализации подобных действий обработчик нажатия кнопки нужно модифицировать следующим образом:
private void ExcelButton_Click(object sender, EventArgs e) { //создать документ на основе шаблона OpenExcelDocument(" spisok. xlsx" );
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|