В роли сервера выступает установленное приложение MS Excel или Word.
Для работы необходимо подключить заголовки: <ComObj.hpp> и <utilcls.h>.
Взаимодействие происходит с помощью методов сервера:
Объекты сервера имеют вложенную, иерархическую структуру, например excel содержит: само приложение (Excel.Application), далее набор книг (Workbooks), далее набор страниц (WorkSheets), далее набор ячеек (Cells).
Создаем документ, задаем начальные параметры
(..) // Переменные объявлены глобально Variant VApp, VSetBooks, VBook, VSetSheets, VSheet, VSetCells, VCell; (..) // Создаем объект приложения Excel VApp= CreateOleObject("Excel.Application"); VApp.OlePropertySet("Visible", true); // Создаем объект- набор рабочих книг VSetBooks= VApp.OlePropertyGet("Workbooks"); // Задаем кол-во листов в создаваемой книге VApp.OlePropertySet("SheetsInNewWorkbook", 1); VSetBooks.OleProcedure("Add"); // Создаем книгу // Ссылка на текущую книгу (у нас одна) VBook= VSetBooks.OlePropertyGet("Item", 1); // Создаем объект- набор страниц, выбранной книги VSetSheets= VBook.OlePropertyGet("Worksheets"); // Выбираем первую страницу VSheet= VSetSheets.OlePropertyGet("Item", 1); // Задаем свойства странице VSheet.OlePropertySet("Name", WideString("Первый лист"));
Далее заполняем данными
// Выбираем группу ячеек, для массовой установки общих свойств VCell= VSheet.OlePropertyGet("Range", WideString("A1:C5")); // Настройка шрифта VCell.OlePropertyGet("Font").OlePropertySet("Name", WideString("Arial")); VCell.OlePropertyGet("Font").OlePropertySet("Size", 16); VCell.OlePropertyGet("Font").OlePropertySet("Color", clBlue); //VCell.OlePropertySet("RowHeight", 15); VCell.OlePropertySet("ColumnWidth", 25); // Вносим значения VSetCells= VSheet.OlePropertyGet("Cells"); VSetCells.OlePropertyGet("Item", 1, 2).OlePropertySet("Value", WideString("1я строка, 2ой столбец"));
Выравнивание по центру (-4108 константа, означает центр)
VCell.OlePropertySet("HorizontalAlignment", -4108); VCell.OlePropertySet("VerticalAlignment", -4108);
Выбор одной ячейки
VCell= VSheet.OlePropertyGet("Cells").OlePropertyGet("Item", 1, 1);
При выборе группы ячеек, их можно объединить
VCell= VSheet.OlePropertyGet("Range", WideString("A1:C5")); VCell.OleProcedure("Merge");
Стили шрифта в ячейке
//Жирный VCell.OlePropertyGet("Font").OlePropertySet("Bold",true); //Курсив VCell.OlePropertyGet("Font").OlePropertySet("Italic",true); //Зачеркнутый VCell.OlePropertyGet("Font").OlePropertySet("Strikethrough",true); //Верхний индекс VCell.OlePropertyGet("Font").OlePropertySet("Superscript",true); //Нижний индекс VCell.OlePropertyGet("Font").OlePropertySet("Subscript",true); //Без линий VCell.OlePropertyGet("Font").OlePropertySet("OutlineFont",true); //C тенью VCell.OlePropertyGet("Font").OlePropertySet("Shadow",true); //Подчеркнутое одинарной линией по значению VCell.OlePropertyGet("Font").OlePropertySet("Underline",2); //Подчеркнутое двойной линией по значению VCell.OlePropertyGet("Font").OlePropertySet("Underline",-4119); //Подчеркнутое одинарной линией по ячейке VCell.OlePropertyGet("Font").OlePropertySet("Underline",4); //Подчеркнутое двойной линией по значению VCell.OlePropertyGet("Font").OlePropertySet("Underline",5);
Заливка ячейки
VCell.OlePropertyGet("Interior").OlePropertySet("ColorIndex",35);
Установить рамку вокруг выбранных ячеек проведением линий с выбранной стороны (Borders) с указанием стиля линии (LineStyle) толщины (Weight) и цвета линии(ColorIndex).
VCell.OlePropertyGet("Borders",10).OlePropertySet("LineStyle",1); VCell.OlePropertyGet("Borders",10).OlePropertySet("Weight",4); VCell.OlePropertyGet("Borders",10).OlePropertySet("ColorIndex",46);
Работа со страницами
// Добавить страницу (добавляется в начало) VSetSheets.OleProcedure("Add"); // Активация второй страницы OleVariant vSecondSheet= VSetSheets.OlePropertyGet("Item",2); vSecondSheet.OleProcedure("Activate"); OleVariant vBefore= EmptyParam, vAfter= vVarSheets.OlePropertyGet("Item",2); // Меняем местами VSheet.OleProcedure("Move", vBefore, vAfter); // Или копируем VSheet.OleProcedure("Copy", vBefore, vAfter); // Или лист копируем или переносим в новую книгу VSheet.OleProcedure("Copy"); VSheet.OleProcedure("Move");