I've found a code for inserting a chart type worksheet (not embedded charts) in excel using Qt Activex as below:
The code works fine. I'm wondering where can if find the standards APIs/some examples for dealing with charts specially with embedded charts. Where can I find some example or APIs for dealing with embedded charts in excel via qt Activex.
I'll be very appreciated if anyone can guide me through generating embedded excel charts with 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)");
I've Hope to this code works:
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 );
But unfortunately it gives this error and I have no idea why
QAxBase: Error calling IDispatch member ChartObjects: Member not found
Edit: I've changed the second line to below and it worked test->querySubObject("ChartObjects()");