crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Excel графики в Qt , нужна помощь
diadia_sid
  опции профиля:
сообщение 24.2.2017, 17:16
Сообщение #11


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 21.2.2017
Пользователь №: 4715

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




Репутация:   0  


Цитата(Алексей1153 @ 23.2.2017, 14:55) *
diadia_sid, вот так прокатывает

//----------------------------------------------
//Создаем объект Charts (коллекция областей диаграмм)
QAxObject * charts = workbook->querySubObject("Charts");
//Добавляем новую область диаграмм
QAxObject * chart = charts->querySubObject("Add()");

auto* range = worksheet->querySubObject("Range(const QVariant&)", QVariant("A2:C200"));
chart->dynamicCall("SetSourceData(const QVariant&)", range->asVariant());

//'xlLocationAsObject== 2
auto listname = worksheet->property("Name");
chart->dynamicCall("Location(const QVariant&,const QVariant&)",QVariant(2), listname );

//'xlColumnClustered== 51
chart->dynamicCall("ChartType(const QVariant&)", QVariant(51));
//----------------------------------------------

//Устанавливаем имя области диаграмм
chart->dynamicCall("Name", "Name");

//...



Кстати, я себе для удобства сделал обёртки QAxObject - с RAII и без аллергии на обращение по нулевому указателю - позволяет избежать многоэтажных проверок и вложенностей кода )


Огромное спасибо! Все получилось. Сейчас довожу до финальной версии. Немного изменил твой код (Перенес изменение Name графика и Типа графика выше (иначе не работало)):
//Создаем объект Charts (коллекция областей диаграмм)
QAxObject * charts = workbook->querySubObject("Charts");
//Добавляем новую область диаграмм
QAxObject * chart = charts->querySubObject("Add()");
auto* range = worksheet->querySubObject("Range(const QVariant&)", QVariant("A2:C200"));
chart->dynamicCall("SetSourceData(const QVariant&)", range->asVariant());

//Устанавливаем имя области диаграмм
chart->dynamicCall("Name", "Name");
//Устанавливаем тип области диаграмм
chart->dynamicCall("ChartType", QVariant("xlLine"));

//Получаем доступ к текущему ряду области диаграмм
QAxObject * series = chart->querySubObject("SeriesCollection(const QVariant&)", QVariant(1));
//Устанавливаем имя ряда
series->dynamicCall("Name", "Name1");

//Получаем объект Range для оси X в виде QVariant
QVariant source = worksheet->dynamicCall("Range(const QVariant&)", QVariant("D2:D200"));
//Устанавливаем диапазон значений X для ряда
series->dynamicCall( "XValues", source );

//Получаем объект Range для оси Y в виде QVariant
source = worksheet->dynamicCall("Range(const QVariant&)", QVariant("A2:A200"));
//Устанавливаем диапазон значений Y для ряда
series->dynamicCall("Values", source);
series = chart->querySubObject("SeriesCollection(const QVariant&)", QVariant(2));
series->dynamicCall("Name", "Name2");
source = worksheet->dynamicCall("Range(const QVariant&)", QVariant("D2:D200"));
series->dynamicCall("XValues", source);
source = worksheet->dynamicCall( "Range(const QVariant&)", QVariant("B2:B200"));
series->dynamicCall("Values", source);
series = chart->querySubObject("SeriesCollection(const QVariant&)", QVariant(3));
series->dynamicCall("Name", "Name3");
source = worksheet->dynamicCall("Range(const QVariant&)", QVariant("D2:D200"));
series->dynamicCall("XValues", source);
source = worksheet->dynamicCall("Range(const QVariant&)", QVariant("B2:B200"));
series->dynamicCall("Values", source);

//'xlLocationAsObject== 2
auto listname = worksheet->property("Name");
chart->dynamicCall("Location(const QVariant&,const QVariant&)",QVariant(2), listname );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
diadia_sid
  опции профиля:
сообщение 2.3.2017, 9:32
Сообщение #12


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 21.2.2017
Пользователь №: 4715

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




Репутация:   0  


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

QAxObject * Size = worksheet->querySubObject("Shapes(const QVariant&)", "Диаграмма 1");
Size->dynamicCall("Width", "850");
Size->dynamicCall("Height", "300");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
diadia_sid
  опции профиля:
сообщение 2.3.2017, 11:27
Сообщение #13


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 21.2.2017
Пользователь №: 4715

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




Репутация:   0  


Еще. Перемещение графика по листу. Значения вводятся относительно верхнего левого края листа.
QAxObject * location = worksheet->querySubObject("Shapes(const QVariant&)", "Диаграмма 1");
location ->dynamicCall("Left", "50");
location ->dynamicCall("Top", "30");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.3.2017, 7:57
Сообщение #14


фрилансер
******

Группа: Участник
Сообщений: 2926
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   35  


diadia_sid, всё, что возвращается из querySubObject обязательно проверяй на 0, а то будут вылеты на вылете и вылетами погонять
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




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