Работа с MS Office с помощью ActiveQt

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: __TOC__ Чтобы подключить библиотеку,вам необходимо в .pro файле (в каталоге с вашим проектом),дописать LIBS +=...)
(Работа со шрифтами)
Строка 47: Строка 47:
<source lang="cpp">
<source lang="cpp">
-
// Ввожу новую переменную, обращаюсь к параметру Font(шрифт) в данной чейке
+
// Ввожу новую переменную, обращаюсь к параметру Font(шрифт) в данной ячейке
// (где у меня текст уже вбит(хотя можно и без текста))
// (где у меня текст уже вбит(хотя можно и без текста))
QAxObject *shrift = rangep->querySubObject("Font");
QAxObject *shrift = rangep->querySubObject("Font");

Версия 18:39, 1 апреля 2009

Содержание


Чтобы подключить библиотеку,вам необходимо в .pro файле (в каталоге с вашим проектом),дописать LIBS += -lqaxcontainer Ну теперь собственно приступаем к кодингу.

#include <ActiveQt/qaxobject.h>
#include <ActiveQt/qaxbase.h>
 
// получаем указатель на Excel
QAxObject *mExcel = new QAxObject( "Excel.Application",this); 
// на книги
QAxObject *workbooks = mExcel->querySubObject( "Workbooks" ); 
// на директорию, откуда грузить книгу
QAxObject *workbook = workbooks->querySubObject( "Open(const QString&)", "C:\\q\\1\\otchet.xls" ); 
// на листы (снизу вкладки)
QAxObject *mSheets = workbook->querySubObject( "Sheets" ); 
// указываем, какой лист выбрать. У меня он называется topic.
QAxObject *StatSheet = mSheets->querySubObject( "Item(const QVariant&)", QVariant("topic") );

Здесь идёт работа с макросами MS Office.

Копирование данных из 1 ячейки в другую

// получаем указатель на ячейку,откуда будем копировать.
QAxObject *rangec = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(2),QVariant(1));
// получаем указатель на ячейку,куда будем копировать.
QAxObject *rangep = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(3),QVariant(1)); 
// осуществляем запрос на копирование.
rangec->dynamicCall("Copy()"); 
//выбираем ячейку,в которую будем вставлять данные
rangep->dynamicCall("Select()"); 
//вставляем.
StatSheet->dynamicCall("Paste()");

Работа со шрифтами

// Получаем указатель на D2
QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant("D2")); 
// Получаем указатель на 2;2 
QAxObject *rangep = StatSheet->querySubObject("Cells(const QVariant&,const QVariant&)",QVariant(2),QVariant(2));

Тут и Range можно, просто разные ячейки.В одной у меня текст забит, и я хочу получить, каким шрифтом он напечатан

// Ввожу новую переменную, обращаюсь к параметру Font(шрифт) в данной ячейке 
// (где у меня текст уже вбит(хотя можно и без текста))
QAxObject *shrift = rangep->querySubObject("Font");
// Возвращаю имя шрифта. 
QString lol = shrift->property("Name").toString(); 
// Отображаю в D2 имя шрифта,который установлен в 2;2
rangec->dynamicCall("setValue(const QVariant&)",QVariant(lol));

Редактирование высоты, ширины строк или столбцов

В место Rows указываем Columns, в место RowHeight указываем ColumnWidth.

// опять же,указатель на D2
QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant("D2")); 
// получаю указатель на строку
QAxObject *razmer = rangec->querySubObject("Rows"); 
// устанавливаю её размер.
razmer->setProperty("RowHeight",34);

Объединение ячеек

// получаю указатель
QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("D2:D5")));
// выбираю их
rangec->dynamicCall("Select()");
// устанавливаю свойство объединения.
rangec->dynamicCall("MergeCells",TRUE);


Разрешает перенос

// указатель на А5
QAxObject *rangep = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A5"))); 
// выбираю её
rangep->dynamicCall("Select()"); 
// устанавливаю свойство разрешения переноса
rangep->dynamicCall("WrapText",TRUE);
// Всё пашет )))Сорри за мой английский)))
rangep->dynamicCall("setValue(const QVariant&)",QVariant("This text is so long:)))WordWrap is working"));

Устанавливает положение текста

Горизонтальное выравнивание

// указатель,как обычно)))
QAxObject *rangep = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A5")));
// выбираю
rangep->dynamicCall("Select()");
// по горизонтальной оси устанавливаю по центру.
// Excel интерпретирует числовые значения положений в свои строковые.например xlCenter.
rangep->dynamicCall("HorizontalAlignment",-4108);

Я здесь напишу основные. Выравнивание по левому краю: -4131 Выравнивание по центру: -4108 Выравнивание по правому краю: -4152

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

// Указатель,как обычно)))
QAxObject *rangep = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A5")));
// Выбираю
rangep->dynamicCall("Select()");
// По вертикальной оси
rangep->dynamicCall("VerticalAlignment",-4160)

Выравнивание по верхнему краю: -4160 Выравнивание по центру: -4108 Выравнивание по нижнему краю: -4107

Удаление\добавление строк

QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("4:4")));
rangec->dynamicCall("Select()");
rangec->dynamicCall("Delete");
 
QAxObject *rangec1 = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("2:2")));
rangec1->dynamicCall("Select()");
rangec1->dynamicCall("Insert");


Удаление\добавление столбцов

QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("E:E")));
rangec->dynamicCall("Select()");
rangec->dynamicCall("Delete");
 
QAxObject *rangec1 = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("B:B"))); 
rangec1->dynamicCall("Select()");
rangec1->dynamicCall("Insert");


Работа с границами ячеек

// Указатель на ячейку
QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A4")));
// xlEdgeTop(верхняя граница) (xlEdgeLeft) левая, 
// (xlEdgeRight) правая,(xlEdgeBottom) нижняя 
// и 2 диагонали (xlDiagonalDown) (xlDiagonalUp)
QAxObject *border = rangec->querySubObject("Borders(xlEdgeTop)");
// тип линии (там пунктиры,сплошная и так далее)
border->setProperty("LineStyle",1); 
// толщина
border->setProperty("Weight",2);


Ну вот собственно на этом я наверно и завершу написание статьи по работе библиотеки QT c MS Office Excel. Далее задавайте вопросы,будем уже на конкретных примерах разбираться.


Обсудить на форуме...