Содержание

OLE-сервер (MS Excel/Word)

Работа с OLE-сервером

В роли сервера выступает установленное приложение MS Excel или Word.
Для работы необходимо подключить заголовки: <ComObj.hpp> и <utilcls.h>.

Взаимодействие происходит с помощью методов сервера:

Объекты сервера имеют вложенную, иерархическую структуру, например excel содержит: само приложение (Excel.Application), далее набор книг (Workbooks), далее набор страниц (WorkSheets), далее набор ячеек (Cells).

Работа с Excel

Создаем документ, задаем начальные параметры

 (..)
 // Переменные объявлены глобально
 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");