Add basic support for Bar3D and Pie3D
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include <QtCore>
|
||||
#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]
|
||||
|
||||
+12
-4
@@ -35,7 +35,7 @@
|
||||
QT_BEGIN_NAMESPACE_XLSX
|
||||
|
||||
ChartPrivate::ChartPrivate(Chart *q)
|
||||
:OOXmlFilePrivate(q)
|
||||
:OOXmlFilePrivate(q), chartType(static_cast<Chart::ChartType>(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"));
|
||||
}
|
||||
|
||||
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<seriesList.size(); ++i)
|
||||
saveXmlSer(writer, seriesList[i].data(), i);
|
||||
|
||||
if (chartType == Chart::CT_Bar) {
|
||||
if (chartType == Chart::CT_Bar || chartType==Chart::CT_Bar3D) {
|
||||
if (axisList.isEmpty()) {
|
||||
const_cast<ChartPrivate*>(this)->axisList.append(QSharedPointer<XlsxAxis>(new XlsxAxis(XlsxAxis::T_Cat, XlsxAxis::Left)));
|
||||
const_cast<ChartPrivate*>(this)->axisList.append(QSharedPointer<XlsxAxis>(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<axisList.size(); ++i) {
|
||||
writer.writeEmptyElement(QStringLiteral("c:axId"));
|
||||
writer.writeAttribute(QStringLiteral("val"), QString::number(i+1));
|
||||
|
||||
@@ -46,7 +46,7 @@ class Q_XLSX_EXPORT Chart : public OOXmlFile
|
||||
|
||||
public:
|
||||
enum ChartType {
|
||||
CT_Area,
|
||||
CT_Area = 1, //Zero is internally used for unknown types
|
||||
CT_Area3D,
|
||||
CT_Line,
|
||||
CT_Line3D,
|
||||
|
||||
Reference in New Issue
Block a user