diff --git a/examples/xlsx/chart/main.cpp b/examples/xlsx/chart/main.cpp index b609d6d..d1ad599 100644 --- a/examples/xlsx/chart/main.cpp +++ b/examples/xlsx/chart/main.cpp @@ -1,7 +1,7 @@ #include #include "xlsxdocument.h" +#include "xlsxcellrange.h" #include "xlsxchart.h" -#include "xlsxworksheet.h" using namespace QXlsx; @@ -9,21 +9,27 @@ int main() { //![0] Document xlsx; - - Worksheet *sheet = xlsx.currentWorksheet(); for (int i=1; i<10; ++i) - sheet->write(i, 1, i*i); + xlsx.write(i, 1, i*i); //![0] //![1] - Chart *pieChart = sheet->insertChart(3, 3, QSize(300, 300)); + Chart *pieChart = xlsx.insertChart(3, 3, QSize(300, 300)); pieChart->setChartType(Chart::CT_Pie); pieChart->addSeries(CellRange("A1:A9")); - Chart *barChart = sheet->insertChart(6, 6, QSize(300, 300)); + Chart *pie3DChart = xlsx.insertChart(3, 7, QSize(300, 300)); + pie3DChart->setChartType(Chart::CT_Pie3D); + pie3DChart->addSeries(CellRange("A1:A9")); + + Chart *barChart = xlsx.insertChart(23, 3, QSize(300, 300)); barChart->setChartType(Chart::CT_Bar); barChart->addSeries(CellRange("A1:A9")); + Chart *bar3DChart = xlsx.insertChart(23, 7, QSize(300, 300)); + bar3DChart->setChartType(Chart::CT_Bar3D); + bar3DChart->addSeries(CellRange("A1:A9")); + //![1] //![2] diff --git a/src/xlsx/xlsxchart.cpp b/src/xlsx/xlsxchart.cpp index 130e89b..ce0c80d 100644 --- a/src/xlsx/xlsxchart.cpp +++ b/src/xlsx/xlsxchart.cpp @@ -35,7 +35,7 @@ QT_BEGIN_NAMESPACE_XLSX ChartPrivate::ChartPrivate(Chart *q) - :OOXmlFilePrivate(q) + :OOXmlFilePrivate(q), chartType(static_cast(0)) { } @@ -184,8 +184,9 @@ bool ChartPrivate::loadXmlXxxChart(QXmlStreamReader &reader) { QStringRef name = reader.name(); if (name == QLatin1String("pieChart")) chartType = Chart::CT_Pie; + else if (name == QLatin1String("pie3DChart")) chartType = Chart::CT_Pie3D; else if (name == QLatin1String("barChart")) chartType = Chart::CT_Bar; - + else if (name == QLatin1String("bar3DChart")) chartType = Chart::CT_Bar3D; while (!reader.atEnd()) { reader.readNextStartElement(); @@ -242,7 +243,9 @@ void ChartPrivate::saveXmlXxxChart(QXmlStreamWriter &writer) const QString t; switch (chartType) { case Chart::CT_Pie: t = QStringLiteral("c:pieChart"); break; + case Chart::CT_Pie3D: t = QStringLiteral("c:pie3DChart"); break; case Chart::CT_Bar: t = QStringLiteral("c:barChart"); break; + case Chart::CT_Bar3D: t = QStringLiteral("c:bar3DChart"); break; default: break; } @@ -253,18 +256,23 @@ void ChartPrivate::saveXmlXxxChart(QXmlStreamWriter &writer) const writer.writeAttribute(QStringLiteral("val"), QStringLiteral("col")); } - writer.writeEmptyElement(QStringLiteral("c:varyColors")); - writer.writeAttribute(QStringLiteral("val"), QStringLiteral("1")); + if (chartType==Chart::CT_Pie || chartType==Chart::CT_Pie3D) { + //Do the same behavior as Excel, Pie prefer varyColors + writer.writeEmptyElement(QStringLiteral("c:varyColors")); + writer.writeAttribute(QStringLiteral("val"), QStringLiteral("1")); + } + for (int i=0; i(this)->axisList.append(QSharedPointer(new XlsxAxis(XlsxAxis::T_Cat, XlsxAxis::Left))); const_cast(this)->axisList.append(QSharedPointer(new XlsxAxis(XlsxAxis::T_Val, XlsxAxis::Bottom))); } - Q_ASSERT(axisList.size()==2); + Q_ASSERT(axisList.size()==2 || (axisList.size()==3 && chartType==Chart::CT_Bar3D)); + for (int i=0; i