Разработка интегрированных прикладных программ (Меньшикова К. Г.). Разработка интегрированных прикладных программ (Меньшикова К. Г.. Методическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика
![]()
|
3.Управление офисными приложениямиПрактически все, что может сделать пользователь, работая с приложениями MS Office, доступно для автоматизации. Для управления сервером, конечно, необходимо знать, какие объекты, свойства и методы предоставлены разработчиками сервера для автоматизации. Эти сведения содержатся обычно в документации, в справочной системе или в литературе. Необходимую информацию можно получить также из библиотеки типов сервера. В Delphi или C++ Builder для этого можно воспользоваться командой импорта библиотеки типов сервера, например, для Excel 2000 в списке библиотек можно увидеть строку: Microsoft Excel 9.0 Object Library. После ее выбора будут созданы файлы с описанием имеющихся объектов (для С++Builder файлы Excel_TLB.cpp и Excel_TLB.h, а для Delphi файл Excel_TLB.pas). Файлы размещаются в (системной) папке, например, C:\ ProgramFiles\ Borland\ Delphi6\ Imports. Для управления серверами удобнее всего воспользоваться компонентами визуальной библиотеки. Однако для этого требуется предварительное знакомство с офисными объектами и проведение программных экспериментов. 3.1.MS Excel и компоненты библиотеки VCLС++Builder и Delphi поддерживают работу со многими распространенными приложениями, предлагая программистам соответствующие компоненты. Офисные компоненты чаще всего располагаются на странице Servers (хотя возможно, что в названии используется номер офисной версии). В любом случае при разработке сложных приложений надо решить вопрос совместимости версий Windows, Microsoft Office и инструментариев разработки, иначе переносимость таких приложений может быть очень ограничена. Компонент ExcelApplication задает приложение Excel, его свойства, методы и события характеризуют приложение в целом. Его свойство Workbooks определяет коллекцию рабочих книг (все открытые в приложении рабочие книги). Компонент ExcelWorkbook задает рабочую книгу и, в свою очередь, имеет свойство Worksheets – все рабочие листы книги. Компонент Worksheet – это конкретный лист рабочей книги. Установить связь с физическим объектом можно так: ExcelApplication1->Connect(); ExcelWorkbook1-> ConnectTo (ExcelApplication1 -> ActiveWorkbook); ExcelWorksheet1 -> ConnectTo (ExcelWorkbook1-> ActiveSheet); ExcelWorksheet2 -> ConnectTo (ExcelWorksheet1 -> get_Next()); Для вызова некоторых методов и свойств используется специальная константа - LOCALE_SYSTEM_DEFAULT (lcid); ее значение равно 0. Например, можно сделать окно Excel видимым (или невидимым, если параметр равен false): #define lcid LOCALE_SYSTEM_DEFAULT ExcelApplication1->set_Visible(lcid,true); При работе с коллекцией Workbooks можно обращаться к ее свойствам, например, узнать количество открытых книг int n= ExcelApplication1-> Workbooks-> Count; и методам, например, открыть и добавить новую книгу WideString filename="d:/work.xls"; ExcelApplication1->Workbooks->Open(filename); ExcelApplication1->Workbooks -> Add(); Сохранить рабочую книгу или сделать рабочий лист активным можно с помощью соответствующих компонент: ExcelWorkbook1->Save(lcid); ExcelWorksheet2 ->Activate (lcid); При работе с офисными компонентами используется раннее связывание. Компилятор, конечно, четко отслеживает типы передаваемых параметров. Однако иногда необходимо или удобно его “обмануть”, упаковав данные в формат TVariant. Например, зададим имена листов: WideString str; str="MyList 1"; ExcelWorksheet1->set_Name(str); ExcelWorksheet2->set_Name((TVariant)"MyList 2"); Работа с ячейками таблицыОдна из ячеек таблицы является активной и с ней можно работать отдельно. Например, можно записать значение: ExcelApplication1->ActiveCell->set_Value((TVariant)"a"); В Excel ячейки таблицы рассматриваются как двумерный массив Cells(<номер строки>,<номер столбца>). Для получения доступа к этому массиву в Builder C++ используется метод get_Cells(). С помощью методов set_Item(<номер строки>, <номер столбца>, <значение>) и get_Item(<номер строки>, <номер столбца>) можно записывать и извлекать значения элементов с указанными индексами. Например: // число 222 записывается в ячейку с номерами (1,1): ExcelWorksheet2 -> get_Cells()-> set_Item((TVariant)1,(TVariant)1,(TVariant)"222"); // для записи формулы используется функция: ExcelWorksheet2 -> get_Cells()-> set_Item((TVariant)5,(TVariant)1,(TVariant) "=СУММА(A1:A3"); // из ячейки (1,4) извлекается значение: k = (TVariant)ExcelWorksheet2 -> get_Cells()-> get_Item((TVariant)1,(TVariant)4); Объект Range рабочего листа ExcelWorksheet предоставляет удобный доступ к таблице и позволяет работать с ячейкой таблицы, диапазоном ячеек, прямоугольной областью. Приведем примеры его использования: // в ячейку B1 занести число 4: ExcelWorksheet1->get_Range((TVariant)"B1", (TVariant)"B1")->set_Value((TVariant)4); // в ячейки с3-с6 записать формулы: ExcelWorksheet2->get_Range((TVariant)"с3",(TVariant)"с6") -> set_Value((TVariant)"=a3+b3"); Когда формула присваивается диапазону ячеек, то переменные в формуле имеют относительные имена, поэтому в предыдущем примере в ячейку c4 будет вписана формула “=a4 +b4” и т.д. // Получение значения из ячейки b5: TVariant y; y=ExcelWorksheet2->get_Range((TVariant)"b5", (TVariant)"b5") -> get_Value(); // Удаление содержимого диапазона ячеек: ExcelWorksheet2 -> get_Range ((TVariant)"D1",(TVariant)"D3") -> Clear(); // Копирование через буфер обмена: ExcelWorksheet2 -> get_Range ((TVariant)"A1",(TVariant)"B3") -> Copy(); ExcelWorksheet2 -> get_Range ((TVariant)"A7",(TVariant)"B9") -> Select(); ExcelWorksheet2 -> Paste(); При переходе от одного объекта Range к другому, например от одной ячейки к другой, отстоящей от первой на определенное расстояние, можно использовать смещение. Достигается это благодаря методу Offset объекта Range. Метод имеет два параметра: смещение по строкам и столбцам, и возвращает новый объект Range, отстоящий от прежнего на заданное расстояние. Например, следующий оператор задает запись в ячейку, отстоящую от “b5” на (–1, 3), то есть в ячейку “e4”: ExcelWorksheet2-> get_Range ((TVariant)"b5", (TVariant)"b5") -> get_Offset ((TVariant)-1,(TVariant)3) ->set_Value((TVariant)"=b5+d4"); Оформление ячеек таблицы можно выполнить так: // выделение курсивом ExcelWorksheet2 -> get_Range ((TVariant)"A1", (TVariant)"E5")->get_Font()->set_Italic((TVariant)true); // выравнивание ExcelWorksheet2->get_Range ((TVariant)"D1", (TVariant) "E3")-> set_HorizontalAlignment((TVariant)xlCenter); // изменение цвета букв: ExcelWorksheet2 -> get_Range((TVariant)"D1", (TVariant) "E3")-> get_Font()-> set_Color((TVariant)0x00FF0000); // заливка цветом: ExcelWorksheet2 -> get_Range((TVariant)"A1",(TVariant) "B7")-> Interior-> set_Color((TVariant)RGB(0,128,200)); Работа с сервером Word организуется аналогичным образом. Среди основных компонент - WordApplication, WordDocument, WordFont и WordParagraphFormat. Примеры работы с ними можно найти в [1]. |