crossplatform.ru

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

8 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Cells в QT при работе с MS Office
abra
  опции профиля:
сообщение 24.3.2009, 19:27
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


Привет.
Здесь столкнулся с такой заботой.
QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A1:B6"))); (выделяем диапозон для работы)
QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)",QVariant(QString("A1"))) (выделяем 1 ячейку)
QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&)",QVariant(QString("1"))) ( выделяем 1 ячейку(аналог Cells(1,1))
QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&)",QVariant(QString("2"))) (выделяем вторую ячейку (аналог Cells(1,2))

Но у меня есть таблица БД.В ней поля.СЛедовательно,должна соблюдаться структура при выводе данных в Эксель

1 поле 2 поле 3 поле 4 поле 5 поле

Но!Как мне обратиться скажем к Cells(2,2)...или Cells(3,4)...Причем это обязательно нужно сделать через цифры (Cells(X,Y) (X,Y- целочисленные указатели на ячейки))
Потому что через A1 нельзя вызывать(в таком случае будет слишком мудрено вызываться ячейка B1)


________________________________________________________________________________
____________________________________________

Хм...Ребят,подождите...Сейчас одна идейка возникла...Может написать

QAxObject *range = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(QString("2")),QVariant(QString("1")))

попробовать.........

________________________________________________________________________________
______________________________________________
Не помогло........

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

Пишет значение в ячейку D1(принял первый параметр равный 4) :((((
Он почему то принимает только первый параметр,и всё.........

Какие будут предложения?

Сообщение отредактировал abra - 24.3.2009, 19:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abra
  опции профиля:
сообщение 24.3.2009, 21:34
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


Проблема решена)))

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

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

Вместо 4 и 8 можно использовать например i и j ,как входные параметры.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 25.3.2009, 20:21
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


abra, а можно вопросик? А как вообще начинать работу с офисом? Не подскажешь, может ссылки какие-нить, можно на английском. Сейчас сам вплотную подошел к этому: надо выгружать данные в Excel или word (не особо важно вочто). А чистый COM не хочется использовать....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.3.2009, 20:54
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


abra, если не лень, то может и правда опишешь?
А то эта тема очень плохо освещена. :(

Заодно и в вику выложим, как и что там.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abra
  опции профиля:
сообщение 1.4.2009, 0:17
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


Оу.Извините))))
Чот как то решил для себя проблему,описал вам её,так и не заходил больше.
Я вот сейчас вплотную занимаюсь работой с 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. Далее задавайте вопросы,будем уже на конкретных примерах разбираться.
:)))

Сообщение отредактировал Litkevich Yuriy - 5.2.2014, 16:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abra
  опции профиля:
сообщение 1.4.2009, 18:42
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


Статью я постоянно редактирую(дополняю),по мере того,как кодю=)))

P.S Сейчас рассмотрю вопрос с границами ячеек,и на этом наверно закончу.Далее задавайте конкретные вопросы.Статью, я могу отредактировать,и можно на Вику выложить.

Сообщение отредактировал abra - 1.4.2009, 19:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.4.2009, 18:54
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


супер!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abra
  опции профиля:
сообщение 1.4.2009, 19:37
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


:) Спасибо.

Сообщение отредактировал abra - 1.4.2009, 19:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 1.4.2009, 20:11
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


abra, бросил твою статью в Faq нашей вики: Работе с MS Office с помощью ActiveQt

Если что, то можешь зайти в нее сам и поправить - добавить.
Имя пользователя и пароль в вики тот же, что ты входишь в форум.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abra
  опции профиля:
сообщение 1.4.2009, 21:27
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 12.1.2009
Пользователь №: 485

Спасибо сказали: 11 раз(а)




Репутация:   2  


Хорошо.Только у меня просьба.Подправь пожалуйста заголовок.
А то там написано - РаботЕ,вместо РаботА
:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

8 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 13:21