crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику abra ::: Спасибо сказали: 11 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
1.4.2009, 18:42 Cells в QT при работе с MS Office
Статью я постоянно редактирую(дополняю),по мере того,как кодю=)))

P.S Сейчас рассмотрю вопрос с границами ячеек,и на этом наверно закончу.Далее задавайте конкретные вопросы.Статью, я могу отредактировать,и можно на Вику выложить.
Litkevich Yuriy,
1.4.2009, 0:17 Cells в QT при работе с MS Office
Оу.Извините))))
Чот как то решил для себя проблему,описал вам её,так и не заходил больше.
Я вот сейчас вплотную занимаюсь работой с MS Office под QT на высоком уровне.Вот сейчас сам ищу статьи,но в инете их нет,поэтому писать самому приходится.

Для начала советую почитать вам вот это

http://hardclub.donntu.edu.ua/projects/qt/...s/qt-excel.html

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

#include <ActiveQt/qaxobject.h>
#include <ActiveQt/qaxbase.h>

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



Работа со шрифтами.Дополнение:

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



Редактирование высоты,ширины строк или столбцов(вместо Rows указываем Columns,вместо RowHeight указываем ColumnWidth )

QAxObject *rangec = StatSheet->querySubObject( "Range(const QVariant&)",QVariant("D2"));//опять же,указатель на 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);//устанавливаю свойство объединения.


Вот еще сейчас покодил.Разрешает перенос:

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

Я здесь напишу основные.
Выравнивание по левому краю: -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")));//указатель на ячейку
    QAxObject *border = rangec->querySubObject("Borders(xlEdgeTop)"); //  xlEdgeTop(верхняя граница) (xlEdgeLeft) левая, (xlEdgeRight) правая,(xlEdgeBottom) нижняя и 2 диагонали (xlDiagonalDown) (xlDiagonalUp)
    border->setProperty("LineStyle",1); //тип линии (там пунктиры,сплошная и так далее)
    border->setProperty("Weight",2);  //толщина



Ну вот собственно на этом я наверно и завершу написание статьи по работе библиотеки QT c MS Office Excel. Далее задавайте вопросы,будем уже на конкретных примерах разбираться.
:)))
AD, AndreyCD, haiflive, igor_bogomolov, LE0N, Litkevich Yuriy, Rocky, ViGOur,
24.3.2009, 21:34 Cells в QT при работе с MS Office
Проблема решена)))

Может кому понадобится

QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(4),QVariant(8 ));

Вместо 4 и 8 можно использовать например i и j ,как входные параметры.
AndreyCD,
23.3.2009, 19:38 Работа с QT4 и MS Office Excel
Что такое динамическая и статическая???

P.S Аааааааааааааа блиннннннннннннннн........Как в этой хреноте всей разобраться(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

УРААААААААА))))))))))))))))))))))))))))сДЕЛАЛ)))))))))))))))))))))))))))))))))))
)))))))))))
НО МОЗГ ПРИШЛОСЬ НАПРЯЧЬ И ПРОЧИТАТЬ 3 ЛИСТА ЛИТЕРАТУРЫ)))))))))))))

Может кому понадобится.
Значит так.Для подключение дополнительных библиотек в проекте(подразумевается,что они у вас собраны в Lib`s необходимо)
В файле проекта (Директория_вашего_проекта\название_проекта.pro) добавить строку LIBS += -lqaxcontainer( в данном случае подключена библиотека,о которой шла речь,в противном случае подключаете библиотеку со своим именем)
AD,

RSS Текстовая версия Сейчас: 25.4.2024, 8:16