Главная · Статьи · Файлы · Фото галерея · Видео онлайн
Библиотека
По авторам
По жанрам
Поиск по названию
Навигация
Главная
Статьи
Файлы
Обратная связь
Фото галерея
Видео онлайн
Поиск

Работа
Заказать сайт или программу

Примеры работ
Последние статьи
Технология уничтожения
«Мы – русские»
Ф.М. Достоевский - Д...
Европа против России...
Первые английские ко...
Reklama

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

Поставим целью из приложения (контроллера автоматизации) создать документ, изображенный на Рис 1.1. Он типичен с точки зрения созданя прикладных программ, использующих для вывода информации Excel и содержит три наиболее часто используемых составных элемента: текстовое поле, электронную таблицу и диаграмму. Путь создания данного документа - это шаги, которые позволят освоить работу с OLE сервером Excel.



Рис 1.1 Итоговый документ, сформированный контроллером.

Для того, чтобы запустить приложение Word или Excel из программы на "Borland C++ Builder" достаточно выполнить, например, следующий код:

char B[254];
FindExecutable("*.doc",NULL,B);
ShellExecute(Handle,"open",B,NULL,NULL,SW_RESTORE);
FindExecutable("*.xls",NULL,B);
ShellExecute(Handle,"open",B,NULL,NULL,SW_RESTORE);

В директории, откуда запущена программы или по указанному пути (например, вместо *.xls указан файл, а вместо параметра NULL путь C:\AB) должен находиться файл с расширением соответственно .doc или .xls, пусть даже пустой.

Приложения будут запущены (есть и другие способы запуска), но управлять ими нельзя - с момента запуска они автономны от запустивших их приложений.

Для запуска Word и Excel как серверов автоматизации необходимо выполнить примерно одни и теже действия. Word посвящен следующий раздел, а здесь далее речь пойдет исключительно о сервере Excel.




1.1 Получение доступа к интерфейсу Application для Excel.
1. Включить в проект модули:

#include
#include

2. Определить - лучше глобально (для наглядности и удобства) - переменные, отражающие иерархию объектов Excel
Приложение->Набор книг->Книга->Набор страниц->Страница->ячейки(ячейка):

Variant vVarApp,vVarBooks,vVarBook,vVarSheets,
vVarSheet,vVarCells,vVarCell;

3. создать объект автоматизации:

vVarApp=CreateOleObject("Excel.Application");

Можно видеть у отдельных авторов в некоторых примерах конструкцию вида Excel.Application.9 и т.п. , что не является обязательным, а скорее всего и вредным - ориентация будет на конкретную библиотеку *.olb. Без указания версии Offise приложение берет ее из реестра (HREY_CLASSES_ROOT раздел Word.Application ключ CurVer, там можно прочитать Excel.Application.8 или Excel.Application.9 или ...).

С этого момента можно пользоваться свойствами и методами созданного ole сервера, а именно:

Установка свойства.

vVarApp.OlePropertySet("имя", значение);

Чтение значения свойства.

переменная = app.OlePropertyGet("имя");

Вызов метода:

vVarApp.OleProcedure("имя",список параметров метода);




1.2 Интерфейсы и константы
Список интерфейсов и констант в Builder можно получить при просмотре библиотеки типов Microsoft Word/Exvel Object Library.

Создав пустое приложение (File/New/Application) и выбрав пункт меню в Buildere File/Open, указав в списке возможных файлов Type Library и выбрав соответствующую библиотеку типов и загрузить ее (для Excel в зависимости от версии это, например, Excel9.olb, для Word - MSWord9.olb). Библиотеки, как правило находится в директории


Programm files/Microsoft Offise/Offise

Загрузка идет несколько минут (библиотеки велики) и по окончании будет создана панель навигатор (Рис 1.2). с описанием всех использованных констант, а также свойств и методов содержащихся в сервере объектов.



Рис 1.2 Библиотека Excel9.olb.

При создании этих файлов появятся сообщения об ошибках, связанные с тем, что в коде Excel и Word могут использоваться зарезервированные слова С++.

После этого возможен просмотр методов и доступ к свойствам и константам указанного интерфейса. Например, для свойства WorkBooks - Application, Creator, Parrent, Add, Close, Count, Item. Open .... - это методы, которые в свою очередь имеют свои свойства, которые можно посмотреть на закладке Parametrs.

При использовании констант будем использовать их числовые значения!! - иначе в файл .cpp придется включать модуль с указанием конкретной версии Offise - например:
#include

Как показано на рисунке, например константа xlBuiltIn имеет значение 21.

Поиск и просмотр возможных констант - наиболее частая потребность при написании программы, здесь довольно затруднителен - нет даже меню поиск, поэтому лучше преобразовать информацию из библиотеки в текстовый файл, нажав крайнюю правую кнопочку навигатора (Export to idl), и преобразованный файл появится как файл с расширением .idl в проекте рядом с файлом Unit1.cpp - теперь достаточно сохранить его в удобном месте и для поиска использовать любой текстовый редактор, к примеру встроенный в FAR.

Для продолжения работы после сохранения файла *.idl и закрытия *.olb необходимо вернуться в рабочую директорию проекта.

Свойств и методов для серверов Word и Excel в указанных библиотеках пожалуй не менее чем в компонентах Builder, поэтому для ориентации при написании программ в среде Borland C++ Builder лучше использовать так называемый "хитрый метод".

Суть его в переводе макроса из кода Visual Basic в С++ код. Этот способ также позволяет просмотреть имена констант линий, стилей, цветов ... Уже по именам легко найти их значения в библиотеках и в сохраненном файле .idl.

Для этого:

1. Запустить Ехель.

2. Сервис/Maкрос/Начать запись

3. Выполннить последовательность нужных действий.

4. Остановить запись

5. Вызвать Visual Basic (Alt+F11)

6. Tools/Macros/Edit

7. Перевести код из кода Visual Basic в С++.




1.3 Создание рабочих книг
Рассмотрим создание двух рабочих книг из 3х и 5ти листов.

Создаем новое приложение (File/New/Application) и сохраним его файлы в директории по умолчанию (Projects) c именами по умолчанию Unit1.cpp, Unit1.h, Unit1.dfm, Project1.cpp, Project1.bpr. Имена на данном этапе не цель, хотя не возбраняется создать новую директорию и дать приложению и файлам подходящие имена.

Переменные соответствующие используемым в программе объектам, а именно:

Variant vVarApp,vVarBooks,vVarBook,
vVarSheets,vVarSheet,vVarCell;
bool fStart;

определим сразу все и глобально - или в файле Unit1.h (в разделе private:), или перед функциями в Unit1.cpp, хотя для данного этапа требуются пока не все переменные и можно определить нужные и локально.

Переменная fStart служит индикатором того, что сервер запущен.

Разместим на форме три кнопки (из вкладки Standart компонент TButton). Подписывать кнопки также не будем (сейчас это тоже не цель), но запомним, что по первой кнопке будем работать с таблицей, по второй с диаграммой, а по третьей закрывать сервер и приложение. Выполним два левых клика по Button1 и Button3, создаем таким образом обработчики события нажатия кнопки.

void __fastcall
TForm1::Button1Click(TObject *Sender)
{

}
void __fastcall
TForm1::Button3Click(TObject *Sender)
{
if(fStart) vVarApp.OleProcedure("Quit");
Close();
}

Третья кнопка таким образом служит для выхода из программы и закрытия сервера.

В обработчике нажатия первой кнопки начнем формировать код программы.

Создаем Объект Excel.Application.

Variant v;
if(!fStart)
{
try
{
vVarApp=CreateOleObject("Excel.Application");
fStart=true;
}
catch(...)
{
MessageBox(0, "Ошибка при открытии сервера Excel",
"Ошибка", MB_OK);
return;
}
}

В принципе конструкцию try catch желательно использовать со всеми Ole вызовами, но громоздкость программы сделает ее ненаглядной. В дальнейшем можно оформить все используемые вызовы в виде класса, но на данном этапе задача стоит в освоении богатства возможностей вызовов, а не ловля возможных букашек. Да и все, приведенные сдесь вызовы 100% работоспособны.

Сделаем приложение видимым (лучше наверное всетаки в конце, но так нагляднее - будет видно как идет заполнение таблиц и т.п.).

vVarApp.OlePropertySet("Visible",true);

Переменной vVarBooks присваивается значение Workbooks - свойство объекта Excel.Application, содержащее набор рабочих книг Excel.

vVarBooks=vVarApp.OlePropertyGet("Workbooks");

SheetsInNewWorkbook задает количество листов в создаваемой книге, пусть в первой книге их будет 3(Кстати по умолчани тоже создается книга, содержащая три листа).

vVarApp.OlePropertySet("SheetsInNewWorkbook",3);

Добавляем книгу из 3 листов в объект vVarBooks.

vVarBooks.OleProcedure("Add");

Количество листов во второй создаваемой книге, пусть будет 5.

vVarApp.OlePropertySet("SheetsInNewWorkbook",5);

Добавляем книгу из 5 листов в объект

vVarBooks.OleProcedure("Add");

Переменная vVarBook содержит ссылку на текущую книгу. (Пусть текущая книга 1).

vVarBook=vVarBooks.OlePropertyGet("Item",1);

Переменной vVarSheets присваиваем значение Worksheets - свойство объекта Excel.Application, содержащее набор страниц книги Excel.

vVarSheets=vVarBook.OlePropertyGet("Worksheets") ;

Присвоение имен листам книги. Т.е, необходимо взять лист выбранной книги и дать ему имя. Заодно и покрасим листы, для чего в любом графическом редакторе создадим два файла с именами a.gif и b.gif размером в несколько пиаселей и соответственно с желтой и красной заливкой. Размер сумарный файлов менее 1к, но приятнее работать не с белым листом. Файлы должны быть помещены в текущую директорию.

vVarSheet=vVarSheets.OlePropertyGet("Item",1);
vVarSheet.OlePropertySet("Name","Желтый лист");
AnsiString vAsCurDir=GetCurrentDir();
AnsiString vAsCurDir1=vAsCurDir+"\\a.gif";
vVarSheet.OleProcedure("Activate");
vVarBook.OlePropertyGet("ActiveSheet").
OleFunction("SetBackgroundPicture",vAsCurDir1.c_str());
vVarSheet=vVarSheets.OlePropertyGet("Item",2);
vVarSheet.OlePropertySet("Name","Краснай лист");
vAsCurDir1=vAsCurDir+"\\b.gif";
vVarSheet.OleProcedure("Activate");
vVarBook.OlePropertyGet("ActiveSheet").
OleFunction("SetBackgroundPicture",vAsCurDir1.c_str());
vVarSheets.OlePropertyGet("Item",3).
OlePropertySet("Name","Пустой лист");

Теперь первый раз запустим приложение и порадуемся что все работает как задумано и на экране две книги Excel и в первой два из трех листов раскрашены.




1.4 Вывод информации в ячейки
Для заполнения таблицы используем датчик случайных чисел. Таблицу будем рисовать в первой книге на желтом листе. Так как перед этим мы работали с первой книгой, то она на данный момент активна.

Основные шаги при заполнении таблицы повторяются:

1. Взять лист.

vVarSheet=vVarSheets.OlePropertyGet("Item",1);

2. Выбрать ячейку или группу ячеек на выбранном листе. Для отдельной ячейки (x и y координаты ячейки):

vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",x,y);

Для группы ячеек:

vVarCell=vVarSheet.OlePropertyGet("Range","A1:C4");
vVarCell.OleProcedure("Merge");

3. Установить режим выравнивания текста в ячейке (ячейках).

vVarCell.OlePropertySet("HorizontalAlignment",-4108);
vVarCell.OlePropertySet("VerticalAlignment",-4108);

Выравнивание текста - вертикальное - Константы

xlHAlignCenter -4108

xlHAlignCenterAcrossSelection 7

xlHAlignDistributed -4117

xlHAlignFill 5

xlHAlignGeneral 1

xlHAlignJustify -4130

xlHAlignLeft -4131

xlHAlignRight -4152

Выравнивание текста - горизонтальное - Константы

xlVAlignBottom = -4107

xlVAlignCenter = -4108

xlVAlignDistributed = -4117

xlVAlignJustify = -4130

xlVAlignTop = -4160

4. Установить размер шрифта.

vVarCell.OlePropertyGet("Font").OlePropertySet("Size",15);

5. Установить цвет шрифта ячейки.

vVarCell.OlePropertyGet("Font").OlePropertySet("Color",clBlue);

6. Установить стиль шрифта ячейки.

//Жирный
vVarCell.OlePropertyGet("Font").
OlePropertySet("Bold",true);
//Курсив
vVarCell.OlePropertyGet("Font").
OlePropertySet("Italic",true);
//Зачеркнутый
vVarCell.OlePropertyGet("Font").
OlePropertySet("Strikethrough",true);
//Верхний индекс
vVarCell.OlePropertyGet("Font").
OlePropertySet("Superscript",true);
//Нижний индекс
vVarCell.OlePropertyGet("Font").
OlePropertySet("Subscript",true);
//Без линий
vVarCell.OlePropertyGet("Font").
OlePropertySet("OutlineFont",true);
//C тенью
vVarCell.OlePropertyGet("Font").
OlePropertySet("Shadow",true);
//Подчеркнутое одинарной линией по значению
vVarCell.OlePropertyGet("Font").
OlePropertySet("Underline",2);
//Подчеркнутое двойной линией по значению
vVarCell.OlePropertyGet("Font").
OlePropertySet("Underline",-4119);
//Подчеркнутое одинарной линией по ячейке
vVarCell.OlePropertyGet("Font").
OlePropertySet("Underline",4);
//Подчеркнутое двойной линией по значению
vVarCell.OlePropertyGet("Font").
OlePropertySet("Underline",5);

Здесь значение констант:

xlUnderlineStyleDouble = -4119,

xlUnderlineStyleDoubleAccounting = 5,

xlUnderlineStyleNone = -4142,

xlUnderlineStyleSingle = 2,

xlUnderlineStyleSingleAccounting = 4

7. Установить имя шрифта ячейки.

vVarCell.OlePropertyGet("Font").OlePropertySet("Name","Arial");

8. Установить заливку ячейки (если необходимо).

vVarCell.OlePropertyGet("Interior").
OlePropertySet("ColorIndex",35);

9. Установить значение данных.

vVarCell.OlePropertySet("Value","Мой текст");
vVarCell.OlePropertySet("Value",25);

10. Вписать формулы аналогично данным.

vVarCell.OlePropertySet("Value","=СУММ(A1:A10)");

11. Если необходимо установить размер ячеек.

vVarCell.OlePropertySet("RowHeight", 20);
vVarCell.OlePropertySet("ColumnWidth",10);

12. Если необходимо изменить ориентацию текста.

vVarCell.OlePropertySet("Orientation",90);
1.5 Рисуем рамки
Аналогично как и при заполнении таблицы рамка рисуется для выбранной ячейки или объединенной группы ячеек.

Шаги рисования рамки:

1. Взять лист.

vVarSheet=vVarSheets.OlePropertyGet("Item",1);

2. Выбрать ячейку или группу ячеек на выбранном листе. Для отдельной ячейки (x и y координаты ячейки):

vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",x,y);

Для группы ячеек:

vVarCell=vVarSheet.OlePropertyGet("Range","A1:C4");
vVarCell.OleProcedure("Merge");

3. Задать шрифт для текста, выравнивание и заливку как показано в предыдущем параграфе.

4. Установить рамку вокруг выбранных ячеек проведением линий с выбранной стороны (Borders) с указанием стиля линии (LineStyle) толщины (Weight) и цвета линии(ColorIndex).

vVarCell.OlePropertyGet("Borders",10).
OlePropertySet("LineStyle",1);
vVarCell.OlePropertyGet("Borders",10).
OlePropertySet("Weight",4);
vVarCell.OlePropertyGet("Borders",10).
OlePropertySet("ColorIndex",46);

Константы, определяющие где проводить линию:

xlInsideHorizontal 12

xlInsideVertical 11

xlDiagonalDown 5

xlDiagonalUp 6

xlEdgeBottom 9

xlEdgeLeft 7

xlEdgeRight 10

xlEdgeTop 8

Константы стиля линии

xlContinuous 1

xlDash -4115

xlDashDot 4

xlDashDotDot 5

xlDot -4118

xlDouble -4119

xlSlantDashDot 13

xlLineStyleNone -4142

Толщина линии

xlHairline 1

xlMedium -4138

xlThick 4

xlThin 2

Таким образом для обрамления с 4х сторон ячейки или группы ячеек надо приведенные выше 3 строки кода повторить 4 раза (для каждой стороны).

5. Если необходимо установить размер ячеек.

vVarCell.OlePropertySet("RowHeight", 20);
vVarCell.OlePropertySet("ColumnWidth",10);

6. Написать текст для отображения в рамке.

vVarCell.OlePropertySet("Value", "Наш текст");




1.6 Текст кода программы создания таблицы Excel.
На данном этапе имеем полностью оформленнуя таблицу. В принципе порой этого бывает вполне достаточно для выполнения поставленной задачи. Осталось сохранить полученные результаты в файле.

//Отключить вывод сообщений с вопросами типа "Заменить файл..."
vVarApp.OlePropertySet("DisplayAlerts",false);
//Сохранить книгу в папке по умолчанию (Мои документы)
//или в файле по указанию
vAsCurDir1=vAsCurDir+"\\amount.xls";
vVarApp.OlePropertyGet("Workbooks").
OlePropertyGet("Item",1).
OleProcedure("SaveAs",
vAsCurDir1.c_str());
//Закрыть открытое приложение Excel
vVarApp.OleProcedure("Quit");

Результат данного этапа показан на рисунке 1.3



Рис 1.3 Таблица Excel.

Ниже приведен полный код текста программы создания таблицы. В тексте введены две дополнительные функции, определенные в файле Unit1.h в разделе private: как:

void __fastcall vBorder(Variant& vVarCell, //Ячейка или группа ячеек
int Weight, //Толщина линии
int LineStyle, //Стиль линии
int ColorIndex); //Цвет линии
void __fastcall vFont(Variant& vVarCell, //Ячейка или группа ячеек
int HAlignment, //Горизонтальное и веоти-
int VAlignment, //кальное выравнивание
int Size, //Размер шрифта
int ColorIndex, //Цвет заливки ячейки
int Name, //Имя шрифта
TColor Color, //Цвет
int Style, //Стиль
int Strikline, //Зачеркивание и индексы
int Underline); //Подчеркивание

Эти функции введены для уменьшения текста кода программы. Правда можно пойти для этой цели и по другому пути, а именно, объединить отдельные вызовы для группы ячеек (Например задать все параметры шрифта, заливку ячеек и т.п. сразу для всуй таблицы, но в этом случае пропадает наглядность и не будет в дальнейшем возможности как то подсветить текст в отдельной ячейке).

Все глобальные переменные определены там где и принято в Borland C++ Builder в файле Unit1.h.

На форме три кнопки - по одной из них запускается сервер Excel и в него выводятся данные, по другой закрывается приложение. Третья кнопка пока свободна.

Файл Unit1.h

#ifndef Unit1H
#define Unit1H
#include
#include
#include
#include
//------------------------------------------
class TForm1 : public TForm
{
__published:
TButton *Button1;
TButton *Button2;
TButton *Button3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
private:
Variant vVarApp,vVarBooks,vVarBook,vVarSheets,
vVarSheet,vVarCells,vVarCell;
AnsiString vAsCurDir;
bool fStart;
void __fastcall vBorder(Variant& vVarCell,int Weight,
int LineStyle,int ColorIndex);
void __fastcall vFont(Variant& vVarCell,int HAlignment,
int VAlignment,int Size,
int ColorIndex,int Name,
TColor Color,int Style,
int Strikline,int Underline);
public:
__fastcall TForm1(TComponent* Owner);
};
//------------------------------------------
extern PACKAGE TForm1 *Form1;
//------------------------------------------
#endif

Файл Unit1.cpp

#include
#pragma hdrstop
#include
#include
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------
void __fastcall
TForm1::Button1Click(TObject *Sender)
{
Variant v;
if(!fStart)
{
try
{
vVarApp=CreateOleObject("Excel.Application");
fStart=true;
}
catch(...)
{
MessageBox(0, "Ошибка при открытии сервера Excel",
"Ошибка", MB_OK);
return;
}
}
else return;
vVarApp.OlePropertySet("Visible",true);
vVarBooks=vVarApp.OlePropertyGet("Workbooks");
vVarApp.OlePropertySet("SheetsInNewWorkbook",3);
vVarBooks.OleProcedure("Add");
vVarApp.OlePropertySet("SheetsInNewWorkbook",2);
vVarBooks.OleProcedure("Add");
vVarBook=vVarBooks.OlePropertyGet("Item",1);
vVarSheets=vVarBook.OlePropertyGet("Worksheets") ;
vVarSheet=vVarSheets.OlePropertyGet("Item",1);
vVarSheet.OlePropertySet("Name","Желтый лист");
vVarSheet.OleProcedure("Activate");
vAsCurDir=GetCurrentDir();
AnsiString vAsCurDir1=vAsCurDir+"\\a.gif";
vVarBook.OlePropertyGet("ActiveSheet").
OleFunction("SetBackgroundPicture",vAsCurDir1.c_str());
vVarSheet=vVarSheets.OlePropertyGet("Item",2);
vVarSheet.OlePropertySet("Name","Краснай лист");
vVarSheet.OleProcedure("Activate");
vAsCurDir1=vAsCurDir+"\\b.gif";
vVarBook.OlePropertyGet("ActiveSheet").
OleFunction("SetBackgroundPicture",vAsCurDir1.c_str());
vVarSheets.OlePropertyGet("Item",3).
OlePropertySet("Name","Пустой лист");
random(50);
vVarSheet=vVarSheets.OlePropertyGet("Item",1);
vVarSheet.OleProcedure("Activate");
for (int i=4; i < 11; i++)
{
//Заносим номер дня в первую строку таблицы
vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",4,i);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clBlue,0,0,0);
vVarCell.OlePropertySet("Value",i-3);
//Занести значение во вторую строку ячейку на выбранном листе
vVarCell= vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",5,i);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clAqua,0,0,0);
vVarCell.OlePropertySet("Value", random(50));
//Занести значение в третью строку ячейку на выбранном листе
vVarCell= vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",6,i);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clGreen,0,0,0);
vVarCell.OlePropertySet("Value", random(30));
}
//Ячейку итог заполним
vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",4,11);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clRed,0,0,0);
vVarCell.OlePropertySet("Value","Итог:");
//добавить формулы подсчета суммы в строки
vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",5,11);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clRed,0,0,0);
vVarCell.OlePropertySet("Value","=СУММ(D5:J5)");
vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",6,11);
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clRed,0,0,0);
vVarCell.OlePropertySet("Value","=СУММ(D6:J6)");
//Изменим размер ячеек
vVarCell=vVarSheet.OlePropertyGet("Cells").
OlePropertyGet("Item",4,2);
vBorder(vVarCell,2,1,55);
vVarCell.OlePropertySet("RowHeight", 20);
vVarCell.OlePropertySet("ColumnWidth",10);
//Объединяем ячейки
vVarCell=vVarSheet.OlePropertyGet("Range","B4:C4");
vVarCell.OleProcedure("Merge");
vBorder(vVarCell,2,1,55);
vFont(vVarCell,-4108,-4108,12,37,1,clBlack,0,0,0);
//Вписываем вид товара
vVarCell.OlePropertySet("Value", "Товар\\Дни недели:");
vVarCell=vVarSheet.OlePropertyGet("Range","B5:C5");
vVarCell.OleProcedure("Merge");
vBorder(vVarCell,2,1,55);
vFont(vVarCell,1,1,12,37,1,clBlack,0,0,0);
vVarCell.OlePropertySet("Value", "Компьютеры:");
vVarCell=vVarSheet.OlePropertyGet("Range","B6:C6");
vVarCell.OleProcedure("Merge");
vBorder(vVarCell,2,1,55);
vFont(vVarCell,1,1,12,37,1,clBlack,0,0,0);
vVarCell.OlePropertySet("Value", "Принтеры:");
//Пишем заголовок
vVarCell=vVarSheet.OlePropertyGet("Range","B2:K3");
vVarCell.OleProcedure("Merge");
vBorder(vVarCell,3,1,46);
vFont(vVarCell,-4108,-4108,16,34,1,clBlue,0,0,-4119);
vVarCell.OlePropertySet("Value", "Продажа техники за неделю");
//Отключить вывод сообщений с вопросами типа "Заменить файл..."
vVarApp.OlePropertySet("DisplayAlerts",false);
//Сохранить вторую книгу в папке по умолчанию (Мои документы)
//или в файле по указанию
vAsCurDir1=vAsCurDir+"\\amount.xls";
vVarApp.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).
OleProcedure("SaveAs",vAsCurDir1.c_str());
//Закрыть открытое приложение Excel
//vVarApp.OleProcedure("Quit");
}
//-------------------------------------------------------
void __fastcall
TForm1::Button3Click(TObject *Sender)
{
if(fStart) vVarApp.OleProcedure("Quit");
Close();
}
//--------------------------------------------------------
void __fastcall
TForm1::Button2Click(TObject *Sender)
{
//Пока не используется
}
//---------------------------------------------------------
//Функция определяет все параметры рисования квадратной рамки
//вокруг ячейки или группе выделенных ячеек
void __fastcall
TForm1::vBorder(Variant& vVarCell,int Weight,
int LineStyle,int ColorIndex)
{
for(int i=8; i <= 10; i++)
{
switch(LineStyle)
{
case 1:
case -4115:
case 4:
case 5:
case -4118:
case -4119:
case 13:
case -4142:
vVarCell.OlePropertyGet("Borders",10).
OlePropertySet("LineStyle",LineStyle);
break;
default:
vVarCell.OlePropertyGet("Borders",i).
OlePropertySet("LineStyle",1);
}
switch(Weight)
{
case 1:
case -4138:
case 2:
case 4:
vVarCell.OlePropertyGet("Borders",i).
OlePropertySet("Weight",Weight);
break;
default:
vVarCell.OlePropertyGet("Borders",i).
OlePropertySet("Weight",1);
}
vVarCell.OlePropertyGet("Borders",i).
OlePropertySet("ColorIndex",ColorIndex);
}
}
//--------------------------------------------------------
//Функция определяет все параметры шрифта, заливку, подчеркивание
//и выравнивание текста в ячейках или группе выделенных ячеек
void __fastcall
TForm1::vFont(Variant& vVarCell,int HAlignment,
int VAlignment,int Size,int ColorIndex,
int Name,TColor Color,int Style,
int Strikline,int Underline)
{
//Выравнивание
switch(HAlignment)
{
case -4108:
case 7:
case -4117:
case 5:
case 1:
case -4130:
case -4131:
case -4152:
vVarCell.OlePropertySet("HorizontalAlignment",HAlignment);
break;
}
switch(VAlignment)
{
case -4108:
case 7:
case -4117:
case 5:
case 1:
case -4130:
case -4131:
case -4152:
vVarCell.OlePropertySet("VerticalAlignment",VAlignment);
break;
}
//Размер шрифта
vVarCell.OlePropertyGet("Font").
OlePropertySet("Size",Size);
//Цвет шрифта
vVarCell.OlePropertyGet("Font").
OlePropertySet("Color",Color);
//Имя щрифта(Можно включаь сколько угодно)
switch(Name)
{
case 1:
vVarCell.OlePropertyGet("Font").
OlePropertySet("Name","Arial");
break;
case 2:
vVarCell.OlePropertyGet("Font").
OlePropertySet("Name","Times New");
break;
default:
vVarCell.OlePropertyGet("Font").
OlePropertySet("Name","System");
}
//Заливка ячейки
vVarCell.OlePropertyGet("Interior").
OlePropertySet("ColorIndex",ColorIndex);
//Стиль шрифта
switch(Style)
{
case 1:
vVarCell.OlePropertyGet("Font").OlePropertySet("Bold",true);
vVarCell.OlePropertyGet("Font").OlePropertySet("Italic",false);
break;
case 2:
vVarCell.OlePropertyGet("Font").OlePropertySet("Bold",false);
vVarCell.OlePropertyGet("Font").OlePropertySet("Italic",true);
break;
case 3:
vVarCell.OlePropertyGet("Font").OlePropertySet("Bold",true);
vVarCell.OlePropertyGet("Font").OlePropertySet("Italic",true);
break;
default:
vVarCell.OlePropertyGet("Font").OlePropertySet("Bold",false);
vVarCell.OlePropertyGet("Font").OlePropertySet("Italic",false);
}
//Зачеркивание и индексы
switch(Strikline)
{
case 1: //Зачеркнутый
vVarCell.OlePropertyGet("Font").
OlePropertySet("Strikethrough",true);
break;
case 2://Верхний индекс
vVarCell.OlePropertyGet("Font").
OlePropertySet("Superscript",true);

break;
case 3://Верхний индекс
vVarCell.OlePropertyGet("Font").
OlePropertySet("Subscript",true);

break;
case 4://Нижний индекс
vVarCell.OlePropertyGet("Font").
OlePropertySet("Subscript",true);

break;
case 5://Без линий
vVarCell.OlePropertyGet("Font").
OlePropertySet("OutlineFont",true);

break;
case 6://C тенью
vVarCell.OlePropertyGet("Font").
OlePropertySet("Shadow",true);

break;
default://Без линий
vVarCell.OlePropertyGet("Font").
OlePropertySet("OutlineFont",true);
}
//Подчеркивание
switch(Underline)
{
case 2:
case 4:
case 5:
case -4119:
vVarCell.OlePropertyGet("Font").
OlePropertySet("Underline",Underline);
break;
}
}
//--------------------------------------------------------




1.7 Создание диаграмм.
1.7.1 Вставка диаграммы в документ.
Для отображения данных листа на диаграмме необходимо выделить эти данные, переменной vVarBooks присвоить значение Charts - свойство объекта Excel.Application, содержащее набор диаграмм и выролнить процедуру Add.

К тексту кода программы создания таблиц добавим код обработки события нажатия кнопки 2, где будем формировать диаграмму.

void __fastcall
TForm1::Button2Click(TObject *Sender)
{
//Вспомогательная переменная
Variant v;
//Выйдем если не запускали создание таблицы
if(!fStart) return;
//Сделать текущей книгу 1
vVarBook=vVarBooks.OlePropertyGet("Item",1);
//Сделать текущим лист 1 книги 1
vVarSheets=vVarBook.OlePropertyGet("Worksheets") ;
vVarSheet=vVarSheets.OlePropertyGet("Item",1);
//Смотреть на лист 1 книги 1
vVarSheet.OlePropertyGet("Select");
//Объеденить ячейки с данными
vVarCell=vVarSheet.OlePropertyGet("Range","D4:J6");
//Выделить ячейки
vVarCell.OleProcedure("Select");
//Переменной vVarBooks присвоить значение Charts - свойство
//объекта Excel.Application, содержащее набор диаграмм
vVarBooks=vVarApp.OlePropertyGet("Charts");
//Добавить диаграмму по умолчанию
vVarBooks.OleProcedure("Add");
}

В результате перед выделенным листом будет вставлена диаграмма, значение данных которой связано с данными выделенного "Желтого листа", изменение данных в ячейках D4:J6 листа сразу же отобразится на диаграмме.



Рис 1.4 Вставка диаграммы по умолчанию.

1.7.2 Перемещение диаграммы между листами книги.
Диаграмма вставлена перед "Желтым листом", т.е. перед тем листом, для которого и создается диаграмма, и это не всегда удобно. Ставим целью переместить диаграмму на лист с таблицей. Добавим следующий код к коду в Button3Click:

vVarBook.OlePropertyGet("ActiveChart").
OleProcedure("Location",2,"Желтый лист");

Здесь можно использовать константы:

xlLocationAsNewSheet = 1;

xlLocationAsObject = 2;

xlLocationAutomatic = 3.

1.7.3 Перемещение диаграммы на листе книги.
Диаграмма "перепрыгнет" на указанный лист, но если последнее закрытие приложения Excel было не с полноэкранного режима или таблица велика, то диаграмма вполне может наложиться на таблицу (не поможет даже режим размещения xlLocationAutomatic). Выберем лист и начнем двигать диаграмму (Кроме перемещения здесь показан еще один способ выбора листа - по имени "Worksheets","Желтый лист").

vVarSheet=vVarBook.OlePropertyGet("Worksheets","Желтый лист");
vVarSheet.OleProcedure("Activate");

Далее смещаем диаграмму в пределах "желтого" листа (конечно параметры приходится подбирать):

vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Top",120);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Left",150);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Height",200);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Width",350);

1.7.4 Изменение типа(вида) диаграммы.
Изменение типа диаграммы связано с изменением свойства - ChartType. До этого работа осуществлялась с диаграммой по умолчанию (Рис. 1.5).



Рис 1.5 Диаграмма по умолчанию.

vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("ChartType",52);

В результате тип диаграммы изменится на один из типов, определяемых множеством констант:

xlColumnClustered = 51,

xlColumnStacked = 52,

xlColumnStacked100 = 53,

xl3DColumnClustered = 54,

xl3DColumnStacked = 55,

xl3DColumnStacked100 = 56,

и т.д.

И еще порядка 70 типов диаграмм. Полный перечень в указанных выше библиотеках.

1.7.5 Присвоение имени диаграммы.
Продолжаем дописывать код - задаем имя диаграмме.

vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("HasTitle",true);
v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("ChartTitle");
v.OleProcedure("Select");
//Присваиваем имя
v.OlePropertyGet("Characters").
OlePropertySet("Text","Итоги продаж за неделю");
//Заполнение
v.OlePropertyGet("Fill").OlePropertySet("Visible",true);
v.OlePropertyGet("Fill").OlePropertyGet("ForeColor").
OlePropertySet("SchemeColor",33);
//Ориентация заголовка
v.OlePropertySet("Orientation",-4128);
//Центрирование
v.OlePropertySet("HorizontalAlignment",-4108);
v.OlePropertySet("VerticalAlignment",-4108);
//Рамка заголовка
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",46);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
//Параметры шрифта
v.OlePropertySet("AutoScaleFont",true);
v.OlePropertyGet("Font").OlePropertySet("Size",12);
v.OlePropertyGet("Font").OlePropertySet("Name","Times New");
v.OlePropertyGet("Font").OlePropertySet("ColorIndex",0);
v.OlePropertyGet("Font").OlePropertySet("Strikethrough",false);
v.OlePropertyGet("Font").OlePropertySet("Superscript",false);
v.OlePropertyGet("Font").OlePropertySet("Subscript",false);
v.OlePropertyGet("Font").OlePropertySet("FontStyle",
"полужирный курсив");
v.OlePropertyGet("Font").OlePropertySet("OutlineFont",true);
v.OlePropertyGet("Font").OlePropertySet("Shadow",true);
v.OlePropertyGet("Font").OlePropertySet("Background",xlTransparent);
v.OlePropertyGet("Font").OlePropertySet("Underline",
xlUnderlineStyleSingle);


Константы для вызова OlePropertySet("Orientation",xlHorizontal):

xlHorizontal = -4128;

xlVertical = -4166.

Толщина линии для вызова OlePropertySet("Weight",2);

xlHairline 1

xlMedium -4138

xlThick 4

xlThin 2

Константы стиля линии для вызова OlePropertySet("LineStyle", xlContinuous):

xlContinuous 1

xlDash -4115

xlDashDot 4

xlDashDotDot 5

xlDot -4118

xlDouble -4119

xlSlantDashDot 13

xlLineStyleNone -4142

Константы выравнивания текста для вызова

xlHAlignCenter -4108

xlHAlignCenterAcrossSelection 7

xlHAlignDistributed -4117

xlHAlignFill 5

xlHAlignGeneral 1

xlHAlignJustify -4130

xlHAlignLeft -4131

xlHAlignRight -4152

Константа xlTransparent для вызова OlePropertySet("Background",xlTransparent) равна 2. //*****

1.7.6 Присвоение названия осям.
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",1,1).
OlePropertySet("HasTitle",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",1,1).
OlePropertyGet("AxisTitle").OlePropertyGet("Characters").
OlePropertySet("Text","Компьютеры - Принтеры");
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",2,1).
OlePropertySet("HasTitle",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",2,1).
OlePropertyGet("AxisTitle").
OlePropertyGet("Characters").
OlePropertySet("Text","Число");

Для доступа к свойствам диаграммы используется вызовы:

OlePropertyGet("Axes",xlCategory, xlPrimary).
OlePropertyGet("Axes",xlValue, xlPrimary).

Другие константы этого вызова:

typedef enum tagXlAxisType:

xlCategory = 1, //по оси х

xlValue = 2 //по оси y

typedef enum tagXlAxisGroup:

xlPrimary = 1,

xlSecondary = 2

1.7.7 Нанесение крупной и мелкой сетки.
//Сетка мелкая
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertySet("HasMajorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertyGet("MajorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertySet("HasMajorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertyGet("MajorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
//Сетка мелкая
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertySet("HasMinorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertyGet("MinorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertySet("HasMinorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertyGet("MinorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);

Для доступа к свойствам также используется вызовы:

OlePropertyGet("Axes",xlCategory). //по оси х
OlePropertyGet("Axes",xlValue). //по оси y

1.7.8 Подписываем и передвигаем легенду.
vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("HasLegend",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",1).
OlePropertySet("Name","Компьютеры");
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",2).
OlePropertySet("Name","Принтеры");
Variant v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Legend");
v.OleProcedure("Select");
//Где разместить - слева, справа, снизу...
v.OlePropertySet("Position", -4152);
//Цвет легенды
v.OlePropertyGet("Interior").OlePropertySet("ColorIndex",34);

Константы для вызова OlePropertySet("Position",xlBottom);

xlBottom = -4107;

xlLeft = -4131;

xlRight = -4152;

xlTop = -4160.

1.7.9 Изменение фона диаграммы и рамки.
Рамка рисуется аналогично рисованию рамки при создании таблиц и используются теже константы.

v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("ChartArea");
v.OleProcedure("Select");
v.OlePropertyGet("Interior").OlePropertySet("ColorIndex",35);
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",46);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);

Толщина линии(Weight)

xlHairline 1

xlMedium -4138

xlThick 4

xlThin 2

Константы стиля линии(LineStyle)

xlContinuous 1

xlDash -4115

xlDashDot 4

xlDashDotDot 5

xlDot -4118

xlDouble -4119

xlSlantDashDot 13

xlLineStyleNone -4142

1.7.10 Удаление лишних данных с номерами дней с диаграммами.
Здесь требуется удалить практически строку данных, которая до сих пор использовалась как основа для формирования расположения точек графика по оси x. Данные хранятся в чвойстве SeriesCollection.

vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",1).
OleProcedure("Delete");

1.7.11 Удаление лишних данных с номерами дней с диаграммами.
Удалим лишнюю информацию с диаграммы строку с цифрами 1,2,3,4,5,6,7.

vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",1).
OleProcedure("Delete");

1.7.12 Сохранение информации.
Это далеко не весь перечень возможностей по изменению вида и цвета диаграмм и т.д. Для продолжения изучения здесь особенно подходит так называемый "хитрый метод". Но, в принципе, представленной информации должно хватить для создания большинства практических задач. Осталось только запомнить данные в файле и на экране результат работы - Рис 1.1.

//Отключить вывод сообщений с вопросами типа "Заменить файл..."
vVarApp.OlePropertySet("DisplayAlerts",false);
//Сохранить книгу в папке по умолчанию (Мои документы)
//или в файле по указанию
AnsiString vAsCurDir1=vAsCurDir+"\\amount.xls";
vVarApp.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).
OleProcedure("SaveAs",vAsCurDir1.c_str());
//Закрыть открытое приложение Excel
//vVarApp.OleProcedure("Quit");




1.8 Текст кода программы, реализующий вывод диаграмм.
Текст кода является продолжением кода, реализующего создание таблицы (п 1.6). В файле Unit1.h добавления не было. В файле Unit1.cpp весь код расположен в обработчике события нажатия кнопки Button2Click.

Variant v; //Вспомогательная переменная
if(!fStart) return;
//Сделать текущей книгу 1
vVarBook=vVarBooks.OlePropertyGet("Item",1);
//Сделать текущим лист 1 книги 1
vVarSheets=vVarBook.OlePropertyGet("Worksheets") ;
vVarSheet=vVarSheets.OlePropertyGet("Item",1);
//Смотреть на лист 1 книги 1
vVarSheet.OlePropertyGet("Select");
//Объеденить ячейки с данными
vVarCell=vVarSheet.OlePropertyGet("Range","D4:J6");
//Выделить ячейки
vVarCell.OleProcedure("Select");
//Переменной vVarBooks присвоить значение Charts - свойство
//объекта Excel.Application, содержащее набор диаграмм
vVarBooks=vVarApp.OlePropertyGet("Charts");
//Добавить диаграмму по умолчанию
vVarBooks.OleProcedure("Add");
//Перемещаем диаграмму на активный лист
vVarBook.OlePropertyGet("ActiveChart").
OleProcedure("Location",2,"Желтый лист");
//Активируем нужный лист
vVarSheet=vVarBook.OlePropertyGet("Worksheets","Желтый лист");
vVarSheet.OleProcedure("Activate");
//Cмещаем диаграмму в пределах "желтого" листа:
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Top",120);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Left",150);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Height",200);
vVarSheet.OlePropertyGet("ChartObjects").
OlePropertyGet("Item",1).OlePropertySet("Width",350);
//Изменяем тип диаграммы
vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("ChartType",52);
//Присвоение имени диаграммы
vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("HasTitle",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("HasTitle",true);
v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("ChartTitle");
//Присваиваем имя
v.OleProcedure("Select");
v.OlePropertyGet("Characters").
OlePropertySet("Text","Итоги продаж за неделю");
//Заполнение
v.OlePropertyGet("Fill").OlePropertySet("Visible",true);
v.OlePropertyGet("Fill").OlePropertyGet("ForeColor").
OlePropertySet("SchemeColor",41);
//Ориентация заголовка
v.OlePropertySet("Orientation",-4128);
//Рамка
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",46);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
//Центровка
v.OlePropertySet("HorizontalAlignment",-4108);
v.OlePropertySet("VerticalAlignment",-4108);
//Шрифт
v.OlePropertySet("AutoScaleFont",true);
v.OlePropertyGet("Font").OlePropertySet("Size",12);
v.OlePropertyGet("Font").OlePropertySet("Name","Times New");
//Два способа задания цвета
v.OlePropertyGet("Font").OlePropertySet("ColorIndex",0);
v.OlePropertyGet("Font").OlePropertySet("Color",clLime);
v.OlePropertyGet("Font").OlePropertySet("Strikethrough",false);
v.OlePropertyGet("Font").OlePropertySet("Superscript",false);
v.OlePropertyGet("Font").OlePropertySet("Subscript",false);
v.OlePropertyGet("Font").OlePropertySet("Bold",true);
v.OlePropertyGet("Font").OlePropertySet("Italic",true);
v.OlePropertyGet("Font").OlePropertySet("OutlineFont",true);
v.OlePropertyGet("Font").OlePropertySet("Shadow",true);
v.OlePropertyGet("Font").OlePropertySet("Background",2);
v.OlePropertyGet("Font").OlePropertySet("Underline",2);
//Присвоение названия оси х
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",1,1).
OlePropertySet("HasTitle",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",1,1).
OlePropertyGet("AxisTitle").OlePropertyGet("Characters").
OlePropertySet("Text","Компьютеры - Принтеры");
//Присвоение названия оси у
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",2,1).
OlePropertySet("HasTitle",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Axes",2,1).
OlePropertyGet("AxisTitle").OlePropertyGet("Characters").
OlePropertySet("Text","Число");
//Наносим сетку крупную и мелкую
//Сетка крупная
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertySet("HasMajorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertyGet("MajorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
///////////
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertySet("HasMajorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertyGet("MajorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
//Сетка мелкая
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertySet("HasMinorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",2).
OlePropertyGet("MinorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
///////////
vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertySet("HasMinorGridlines",true);
v=vVarBook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes",1).
OlePropertyGet("MinorGridlines");
v.OleProcedure("Select");
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",8);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
//Подписываем легенду
vVarBook.OlePropertyGet("ActiveChart").
OlePropertySet("HasLegend",true);
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",2).
OlePropertySet("Name","Компьютеры");
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",3).
OlePropertySet("Name","Принтеры");
v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("Legend");
v.OleProcedure("Select");
v.OlePropertySet("Position",-4152);
v.OlePropertyGet("Interior").OlePropertySet("ColorIndex",34);
//Изменяем фон для диаграммы и рамку
v=vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("ChartArea");
v.OleProcedure("Select");
v.OlePropertyGet("Interior").OlePropertySet("ColorIndex",35);
v.OlePropertyGet("Border").OlePropertySet("ColorIndex",46);
v.OlePropertyGet("Border").OlePropertySet("Weight",2);
v.OlePropertyGet("Border").OlePropertySet("LineStyle",1);
//Удаляем лишнюю информацию с диаграммы строку 1,2,3,4,5,6,7
vVarBook.OlePropertyGet("ActiveChart").
OlePropertyGet("SeriesCollection",1).
OleProcedure("Delete");
//Отключить вывод сообщений с вопросами типа "Заменить файл..."
vVarApp.OlePropertySet("DisplayAlerts",false);
//Сохранить книгу в папке по умолчанию (Мои документы)
//или в файле по указанию
AnsiString vAsCurDir1=vAsCurDir+"\\amount.xls";
vVarApp.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).
OleProcedure("SaveAs",vAsCurDir1.c_str());
//Закрыть открытое приложение Excel
//vVarApp.OleProcedure("Quit");




1.9 Режимы отображения приложения
Для того, чтобы просмотреть все возможные режима отображения создадим новое приложение (File/New/Application) и поместим 5 кнопок на форму.

Создадим обработчики события для всех кнопок (2 левых клика по кнопке) и обработчик события FormCreate (2 левых клика по площади формы).

Полный текст кода программы позволяющий при нажатии кнопок менять режим отображения сервера автоматизации из контроллера.

#include
#include
#include
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Variant vVarApp;
//--------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------
void __fastcall
TForm1::FormCreate(TObject *Sender)
{
vVarApp=CreateOleObject("Excel.Application");
vVarApp.OlePropertySet("Visible",true);
}
//--------------------------------------------------
void __fastcall
TForm1::Button1Click(TObject *Sender)
{ ////// Полноэкранный режим ////////////
vVarApp.OlePropertySet("DisplayFullScreen",true);
}
//--------------------------------------------------
void __fastcall
TForm1::Button2Click(TObject *Sender)
{
//// Возврат в режим, установленный при запуске /////
vVarApp.OlePropertySet("DisplayFullScreen",false);
}
//--------------------------------------------------
void __fastcall
TForm1::Button3Click(TObject *Sender)
{
/////Минимизированное - свернутое в око/////
vVarApp.OlePropertySet("WindowState",-4140);
}
//--------------------------------------------------
void __fastcall
TForm1::Button4Click(TObject *Sender)
{
//////Окно развернутое во весь экран//////
vVarApp.OlePropertySet("WindowState",-4137);
}
//--------------------------------------------------
void __fastcall
TForm1::Button5Click(TObject *Sender)
{
////////Нормальный размер окна///////
vVarApp.OlePropertySet("WindowState",-4143);
}
//--------------------------------------------------

Значения констант:

xlMinimized -4140

xlMaximized -4137

xlNormal -4143




1.10 Размеры приложения
Прежде чем изменять размер приложения необходимо выключить полноэкранный режим и затем уже выставить размеры. В предыдущем примере заменяем обработчик события Button2Click на следующий код.

void __fastcall
TForm1::Button2Click(TObject *Sender)
{
vVarApp.OlePropertySet("DisplayFullScreen",false);
vVarApp.OlePropertySet("Width",520);
vVarApp.OlePropertySet("Height",500);
vVarApp.OlePropertySet("Left",20);
vVarApp.OlePropertySet("Top",100);
}

Приложение будет при нажатии Button2 принимать установленные размеры.




1.11 Управление панелями инструментов
Для управления панелями инструментов используется свойство "CommandBars" и имена панелей, которые необходимо отобразить или скрыть.

Standard

Formatting

Visual Basic

Web

WordArt

Clipboard

External Data

Exit Design Mode

Stop Recording

Chart

Picture

Reviewing

Drawing

PivotTable

Forms

Control Toolbox


В предыдущем примере заменяем обработчик события Button2Click и Button3Click на следующие коды.

void __fastcall TForm1::Button2Click(TObject *Sender)
{
vVarApp.OlePropertyGet("CommandBars","Standard").
OlePropertySet("Visible",true);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
vVarApp.OlePropertyGet("CommandBars","Standard").
OlePropertySet("Visible",false);
}

Нажимая поочередно кнопки 2 и 3 будем видеть появление и удаление указанной в вызове панели.




1.12 Масштаб документа
Следующий пример изменяет масштаб документа по Button1Click на 50% и по Button2Click на 100%. В предыдущем примере внесем следующие изменения.

Variant vVarApp,vVarBooks;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
vVarApp=CreateOleObject("Excel.Application");
vVarApp.OlePropertySet("Visible",true);
vVarBooks=vVarApp.OlePropertyGet("Workbooks");
vVarApp.OlePropertySet("SheetsInNewWorkbook",1);
vVarBooks.OleProcedure("Add");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
vVarApp.OlePropertyGet("ActiveWindow").
OlePropertySet("Zoom",50);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
vVarApp.OlePropertyGet("ActiveWindow").
OlePropertySet("Zoom",100);
}




1.13 Спрятать шапки строк и столбцов.
vVarApp.OlePropertyGet("ActiveWindow").
OlePropertySet("DisplayHea
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь.
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 1
Не активированный пользователь: 0
новичок: AMD
Статистика
Яндекс.Метрика
Rambler's Top100


PR-CY.ru
Protected by Copyscape Online Plagiarism Checker
Back To Top Back To Top Back To Top

Best Viewed 1280x1024