2016-11-02 5 views
0

Я нашел код для вставки типа диаграммы рабочего листа (не встроенные диаграммы) в Excel с помощью Qt Activex, как показано ниже:Генерирующие встроенные диаграммы с помощью кварт ActiveX

код работает отлично. Мне интересно, где можно найти API-интерфейсы стандартов/некоторые примеры для работы с диаграммами, специально со встроенными диаграммами. Где я могу найти пример или API для работы со встроенными диаграммами в excel через qt Activex.

Я буду очень признателен, если кто-нибудь может вести меня через порождающие внедренные диаграммы первенствовать с QActivex

QAxObject *excel = new QAxObject("Excel.Application", 0); 
QAxObject *workbook = excel->querySubObject("Workbooks")->querySubObject("Add"); 
QAxObject *worksheet = workbook->querySubObject("Worksheets(1)"); 
worksheet->setProperty("Name", "Dati applicazione"); 
worksheet->querySubObject("Cells(1,1)")->dynamicCall("SetValue", "Serie"); 
worksheet->querySubObject("Cells(1,2)")->dynamicCall("SetValue", "Dati"); 

QAxObject *cell; 
double dval; 
for (int i = 2; i < 10; ++i) { 
    dval = qrand(); 
    cell = worksheet->querySubObject("Cells(int,int)", i, 1); 
    cell->dynamicCall("SetValue(int)", i-1); 
    cell = worksheet->querySubObject("Cells(int,int)", i, 2); 
    cell->dynamicCall("SetValue(double)", dval); 
    cell = worksheet->querySubObject("Cells(int,int)",i,3); 
    cell->dynamicCall("SetValue(double)", dval/2.0); 
    cell = worksheet->querySubObject("Cells(int,int)", i, 4); 
    cell->dynamicCall("SetValue(double)", dval/3.0); 
} 

QAxObject *range = worksheet->querySubObject("Range(A2:C9)"); 
range->dynamicCall("Select(void)"); 

QAxObject *chart = workbook->querySubObject("Charts")->querySubObject("Add"); 
chart->setProperty("Name", "Report Grafico dei dati"); 
chart->setProperty("Chart Type", 73); 

QAxObject *series = chart->querySubObject("SeriesCollection"); 

QAxObject *serie = series->querySubObject("Item (int)", 1); 
QAxObject *xvalues = worksheet->querySubObject("Range(A2:A9)"); 
QAxObject *yvalues = worksheet->querySubObject("Range(B2:B9)"); 
serie->setProperty("XValues", xvalues->asVariant()); 
serie->setProperty("Values", yvalues->asVariant()); 

serie = series->querySubObject("Item (int)", 2); 
yvalues = worksheet->querySubObject("Range(C2:C9)"); 
serie->setProperty("XValues", xvalues->asVariant()); 
serie->setProperty("Values", yvalues->asVariant()); 

serie = series->querySubObject("Item (int)",3); 
yvalues = worksheet->querySubObject("Range(D2:D9)"); 
serie->setProperty("XValues", xvalues->asVariant()); 
serie->setProperty("Values", yvalues->asVariant()); 

workbook->dynamicCall("SaveAs(const QString&)", "E:\\test\\test.xls"); 
workbook->dynamicCall("Close (Bollean)", false); 
excel->dynamicCall("Quit (void)"); 

ответ

0

Я Надежду этот код работает:

QAxObject* test = workbook->querySubObject("ActiveSheet"); 
QAxObject* charts = test->querySubObject("ChartObjects"); 
QList<QVariant> f; f << 200 << 400 << 200 << 200; 
QVariant ch = charts->dynamicCall("Add(int, int, int, int)", f); 

Но, к сожалению, она дает это ошибка, и я понятия не имею, почему

QAxBase: Error calling IDispatch member ChartObjects: Member not found 

Редактировать: я изменил вторую строку ниже d он работал test-> querySubObject ("ChartObjects()");

+0

Возможно, у вас нет ActiveSheet. Это может случиться, когда приложение не видно. Попробуйте получить workbook-> querySubObject («Рабочие листы (1)»), как в предыдущем примере. Рабочие листы поддерживают ChartObjects. –

+0

@ CarlosE.Ferro Это не имеет никакого значения. Я уже пробовал это – Mosi

+0

Хм. Может быть типом. ChartObjects - это коллекция, которую вы пытаетесь присвоить указателю объекта. В этом примере они не обрабатывают коллекции, а назначают добавление напрямую, с QAxObject * chart = workbook-> querySubObject ("Charts") -> querySubObject ("Добавить") –

Смежные вопросы