From d33486d54f1a08a5e813351ae88ef95c1031d600 Mon Sep 17 00:00:00 2001 From: mindline Date: Mon, 25 Apr 2022 14:14:28 +0200 Subject: [PATCH 1/7] Feat: series data labels hide option/ number format - only write data label xml block, if at least one data label should be displayed - adds data label number format to all chart types --- .../Writer/PowerPoint2007/PptCharts.php | 1140 ++++++++++------- 1 file changed, 646 insertions(+), 494 deletions(-) diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php index 40ac9d44a..ff812354c 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php @@ -734,32 +734,49 @@ protected function writeTypeArea(XMLWriter $objWriter, Area $subject, bool $incl $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords); $objWriter->endElement(); - // c:ser > c:dLbls - // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx - $objWriter->startElement('c:dLbls'); - - // c:ser > c:dLbls > c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:ser > c:dLbls + // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + //c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:ser > c:dLbls > c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:ser > c:dLbls > c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:ser > c:dLbls > c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:ser > c:dLbls > c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:ser > c:dLbls > c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:ser > c:dLbls > c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:ser > ##c:dLbls - $objWriter->endElement(); + // c:ser > c:dLbls > c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - if (Fill::FILL_NONE != $series->getFill()->getFillType()) { - // c:spPr - $objWriter->startElement('c:spPr'); - // Write fill - $this->writeFill($objWriter, $series->getFill()); - // ## c:spPr + // c:ser > ##c:dLbls $objWriter->endElement(); + + if (Fill::FILL_NONE != $series->getFill()->getFillType()) { + // c:spPr + $objWriter->startElement('c:spPr'); + // Write fill + $this->writeFill($objWriter, $series->getFill()); + // ## c:spPr + $objWriter->endElement(); + } } // Write X axis data @@ -861,94 +878,103 @@ protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, bool $includ $objWriter->endElement(); } - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + // c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - if ($series->hasDlblNumFormat()) { - //c:numFmt - $objWriter->startElement('c:numFmt'); - $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); - $objWriter->writeAttribute('sourceLinked', '0'); - $objWriter->endElement(); - } + // c:txPr + $objWriter->startElement('c:txPr'); - // c:txPr - $objWriter->startElement('c:txPr'); + // a:bodyPr + $objWriter->writeElement('a:bodyPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr'); + // a:lstStyle + $objWriter->writeElement('a:lstStyle'); - // a:lstStyle - $objWriter->writeElement('a:lstStyle'); + // a:p + $objWriter->startElement('a:p'); - // a:p - $objWriter->startElement('a:p'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // a:defRPr - $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - - // a:solidFill - $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + // a:solidFill + $objWriter->startElement('a:solidFill'); + $this->writeColor($objWriter, $series->getFont()->getColor()); + $objWriter->endElement(); - // a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - // >a:defRPr - $objWriter->endElement(); - // >a:pPr - $objWriter->endElement(); + // >a:defRPr + $objWriter->endElement(); + // >a:pPr + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - // >a:p - $objWriter->endElement(); - // >a:lstStyle - $objWriter->endElement(); + // >a:p + $objWriter->endElement(); + // >a:lstStyle + $objWriter->endElement(); - // c:dLblPos - $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); + // c:dLblPos + $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:separator - $objWriter->writeElement('c:separator', $series->hasShowSeparator() ? $series->getSeparator() : ''); + // c:separator + $objWriter->writeElement('c:separator', $series->hasShowSeparator() ? $series->getSeparator() : ''); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // c:spPr if (Fill::FILL_NONE != $series->getFill()->getFillType()) { @@ -1073,80 +1099,97 @@ protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, bool $in $objWriter->endElement(); } - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + //c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:txPr - $objWriter->startElement('c:txPr'); + // c:txPr + $objWriter->startElement('c:txPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // c:spPr if (Fill::FILL_NONE != $series->getFill()->getFillType()) { @@ -1278,83 +1321,115 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo } if (isset($series) && is_object($series) && $series instanceof Chart\Series) { - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + // c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - if ($series->hasDlblNumFormat()) { - //c:numFmt - $objWriter->startElement('c:numFmt'); - $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); - $objWriter->writeAttribute('sourceLinked', '0'); + // c:dLbls\c:txPr + $objWriter->startElement('c:txPr'); + $objWriter->writeElement('a:bodyPr', null); + $objWriter->writeElement('a:lstStyle', null); + + // c:dLbls\c:txPr\a:p + $objWriter->startElement('a:p'); + + $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + + // c:dLbls\c:txPr + $objWriter->startElement('c:txPr'); + $objWriter->writeElement('a:bodyPr', null); + $objWriter->writeElement('a:lstStyle', null); + + // c:dLbls\c:txPr\a:p + $objWriter->startElement('a:p'); + + // c:dLbls\c:txPr\a:p\a:pPr + $objWriter->startElement('a:pPr'); + + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr + $objWriter->startElement('a:defRPr'); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '300000'); + $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-250000'); + + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill + $objWriter->startElement('a:solidFill'); + $this->writeColor($objWriter, $series->getFont()->getColor()); $objWriter->endElement(); - } - - // c:dLbls\c:txPr - $objWriter->startElement('c:txPr'); - $objWriter->writeElement('a:bodyPr', null); - $objWriter->writeElement('a:lstStyle', null); - // c:dLbls\c:txPr\a:p - $objWriter->startElement('a:p'); - - // c:dLbls\c:txPr\a:p\a:pPr - $objWriter->startElement('a:pPr'); - - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr - $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill - $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr + $objWriter->startElement('a:defRPr'); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill + $objWriter->startElement('a:solidFill'); + $this->writeColor($objWriter, $series->getFont()->getColor()); + $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\ - $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\a:pPr\ - $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\ + $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:pPr\ + $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\ - $objWriter->endElement(); - // c:dLbls\c:txPr\ - $objWriter->endElement(); + // c:dLbls\c:txPr\a:p\ + $objWriter->endElement(); + // c:dLbls\c:txPr\ + $objWriter->endElement(); - $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + $separator = $series->getSeparator(); + if (!empty($separator) && PHP_EOL != $separator) { + // c:dLbls\c:separator + $objWriter->writeElement('c:separator', $separator); + } - $separator = $series->getSeparator(); - if (!empty($separator) && PHP_EOL != $separator) { - // c:dLbls\c:separator - $objWriter->writeElement('c:separator', $separator); + // c:dLbls\ + $objWriter->endElement(); } - - // c:dLbls\ - $objWriter->endElement(); } $this->writeElementWithValAttribute($objWriter, 'c:firstSliceAng', '0'); @@ -1415,94 +1490,103 @@ protected function writeTypePie(XMLWriter $objWriter, Pie $subject, bool $includ $objWriter->endElement(); } - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + // c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - if ($series->hasDlblNumFormat()) { - //c:numFmt - $objWriter->startElement('c:numFmt'); - $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); - $objWriter->writeAttribute('sourceLinked', '0'); - $objWriter->endElement(); - } + // c:txPr + $objWriter->startElement('c:txPr'); - // c:txPr - $objWriter->startElement('c:txPr'); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); - - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:dLblPos - $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); + // c:dLblPos + $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); - // c:showLegendKey - $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); + // c:showLegendKey + $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // Write X axis data $axisXData = array_keys($series->getValues()); @@ -1586,83 +1670,100 @@ protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, bool $in $objWriter->endElement(); } - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + //c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:txPr - $objWriter->startElement('c:txPr'); + // c:txPr + $objWriter->startElement('c:txPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:dLblPos - $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); + // c:dLblPos + $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // Write X axis data $axisXData = array_keys($series->getValues()); @@ -1738,84 +1839,101 @@ protected function writeTypeLine(XMLWriter $objWriter, Line $subject, bool $incl // Marker $this->writeSeriesMarker($objWriter, $series->getMarker()); - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + // c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:txPr - $objWriter->startElement('c:txPr'); + // c:txPr + $objWriter->startElement('c:txPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:dLblPos - $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); + // c:dLblPos + $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - // > c:dLbls - $objWriter->endElement(); + // > c:dLbls + $objWriter->endElement(); + } // Write X axis data $axisXData = array_keys($series->getValues()); @@ -1916,83 +2034,100 @@ protected function writeTypeRadar(XMLWriter $objWriter, Radar $subject, bool $in // Marker $this->writeSeriesMarker($objWriter, $series->getMarker()); - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + //c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:txPr - $objWriter->startElement('c:txPr'); + // c:txPr + $objWriter->startElement('c:txPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:showLegendKey - $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); + // c:showLegendKey + $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // Write X axis data $axisXData = array_keys($series->getValues()); @@ -2081,90 +2216,107 @@ protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, bool // Marker $this->writeSeriesMarker($objWriter, $series->getMarker()); - // c:dLbls - $objWriter->startElement('c:dLbls'); + // DataLabels + if ( + $series->hasShowSeriesName() || + $series->hasShowCategoryName() || + $series->hasShowLegendKey() || + $series->hasShowValue() || + $series->hasShowPercentage() + ) { + // c:dLbls + $objWriter->startElement('c:dLbls'); + + if ($series->hasDlblNumFormat()) { + //c:numFmt + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); + $objWriter->writeAttribute('sourceLinked', '0'); + $objWriter->endElement(); + } - // c:txPr - $objWriter->startElement('c:txPr'); + // c:txPr + $objWriter->startElement('c:txPr'); - // a:bodyPr - $objWriter->writeElement('a:bodyPr', null); + // a:bodyPr + $objWriter->writeElement('a:bodyPr', null); - // a:lstStyle - $objWriter->writeElement('a:lstStyle', null); + // a:lstStyle + $objWriter->writeElement('a:lstStyle', null); - // a:p - $objWriter->startElement('a:p'); + // a:p + $objWriter->startElement('a:p'); - // a:pPr - $objWriter->startElement('a:pPr'); + // a:pPr + $objWriter->startElement('a:pPr'); - // a:defRPr - $objWriter->startElement('a:defRPr'); + // a:defRPr + $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); + $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); + $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); + $objWriter->writeAttribute('strike', $series->getFont()->getStrikethrough()); + $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); + $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); + $objWriter->writeAttributeIf($series->getFont()->getBaseline() !== 0, 'baseline', $series->getFont()->getBaseline()); - // Font - a:solidFill - $objWriter->startElement('a:solidFill'); + // Font - a:solidFill + $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); + $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); + $objWriter->endElement(); - // Font - a:latin - $objWriter->startElement('a:latin'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); - // a:ea - $objWriter->startElement('a:ea'); - $objWriter->writeAttribute('typeface', $series->getFont()->getName()); - $objWriter->endElement(); + // Font - a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', $series->getFont()->getName()); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:endParaRPr - $objWriter->startElement('a:endParaRPr'); - $objWriter->writeAttribute('lang', 'en-US'); - $objWriter->writeAttribute('dirty', '0'); - $objWriter->endElement(); + // a:endParaRPr + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', 'en-US'); + $objWriter->writeAttribute('dirty', '0'); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // c:showLegendKey - $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); + // c:showLegendKey + $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); - // c:showVal - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + // c:showVal + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - // c:showCatName - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + // c:showCatName + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - // c:showSerName - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + // c:showSerName + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - // c:showPercent - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + // c:showPercent + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - // c:separator - $separator = $series->getSeparator(); - if (!empty($separator) && PHP_EOL != $separator) { - // c:dLbls\c:separator - $objWriter->writeElement('c:separator', $separator); - } + // c:separator + $separator = $series->getSeparator(); + if (!empty($separator) && PHP_EOL != $separator) { + // c:dLbls\c:separator + $objWriter->writeElement('c:separator', $separator); + } - // c:showLeaderLines - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + // c:showLeaderLines + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - $objWriter->endElement(); + $objWriter->endElement(); + } // Write X axis data $axisXData = array_keys($series->getValues()); From dffbfaed5bc20ad1ea29831fc5bed35998dcfd30 Mon Sep 17 00:00:00 2001 From: mindline Date: Mon, 25 Apr 2022 14:31:14 +0200 Subject: [PATCH 2/7] Docs: updates changelog --- docs/changes/1.2.0.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changes/1.2.0.md b/docs/changes/1.2.0.md index 5ed1d7578..f8ed67340 100644 --- a/docs/changes/1.2.0.md +++ b/docs/changes/1.2.0.md @@ -10,6 +10,9 @@ - `phpoffice/phpspreadsheet`: Allow version 3.0 by [@Progi1984](https://github.com/Progi1984) fixing [#836](https://github.com/PHPOffice/PHPPresentation/pull/836) in [#839](https://github.com/PHPOffice/PHPPresentation/pull/839) - `createAutoShape` : Add method to create geometric shapes by [@mhasanshahid](https://github.com/mhasanshahid) & [@Progi1984](https://github.com/Progi1984) in [#848](https://github.com/PHPOffice/PHPPresentation/pull/848) - Reader : Option to not load images by [@Progi1984](https://github.com/Progi1984) fixing [#795](https://github.com/PHPOffice/PHPPresentation/pull/795) in [#850](https://github.com/PHPOffice/PHPPresentation/pull/850) +- PowerPoint2007 Writer : Improve series data labels - [@mindline](https://github.com/mindline-analytics) GH-709 + - adds data labels number format for all chart types + - skips data labels xml if no lables should be shown ## Bug fixes From 785b6fd00123220aa1235337ed979de103f25e0d Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 13 Feb 2025 08:26:15 +0100 Subject: [PATCH 3/7] Fixed Changelog --- docs/changes/1.2.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changes/1.2.0.md b/docs/changes/1.2.0.md index f8ed67340..6f7a22963 100644 --- a/docs/changes/1.2.0.md +++ b/docs/changes/1.2.0.md @@ -10,7 +10,7 @@ - `phpoffice/phpspreadsheet`: Allow version 3.0 by [@Progi1984](https://github.com/Progi1984) fixing [#836](https://github.com/PHPOffice/PHPPresentation/pull/836) in [#839](https://github.com/PHPOffice/PHPPresentation/pull/839) - `createAutoShape` : Add method to create geometric shapes by [@mhasanshahid](https://github.com/mhasanshahid) & [@Progi1984](https://github.com/Progi1984) in [#848](https://github.com/PHPOffice/PHPPresentation/pull/848) - Reader : Option to not load images by [@Progi1984](https://github.com/Progi1984) fixing [#795](https://github.com/PHPOffice/PHPPresentation/pull/795) in [#850](https://github.com/PHPOffice/PHPPresentation/pull/850) -- PowerPoint2007 Writer : Improve series data labels - [@mindline](https://github.com/mindline-analytics) GH-709 +- PowerPoint2007 Writer : Improve series data labels - [@mindline-analytics](https://github.com/mindline-analytics) & [@Progi1984](https://github.com/Progi1984) in [#853](https://github.com/PHPOffice/PHPPresentation/pull/853) - adds data labels number format for all chart types - skips data labels xml if no lables should be shown From 0467eb2cf7fd53356c948e2a2869f3389c549aea Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 13 Feb 2025 08:32:21 +0100 Subject: [PATCH 4/7] Fixed PHPCSFixer --- src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php index ff812354c..37e092dfc 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php @@ -1344,7 +1344,7 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo $objWriter->startElement('c:txPr'); $objWriter->writeElement('a:bodyPr', null); $objWriter->writeElement('a:lstStyle', null); - + // c:dLbls\c:txPr\a:p $objWriter->startElement('a:p'); From f2e4bf564584e5ad1e5b2e47cbb07bc7580877cb Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 13 Feb 2025 08:33:33 +0100 Subject: [PATCH 5/7] Fixed duplicated code --- .../Writer/PowerPoint2007/PptCharts.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php index 37e092dfc..54272e281 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php @@ -1367,21 +1367,6 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo // c:dLbls\c:txPr\a:p\a:pPr $objWriter->startElement('a:pPr'); - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr - $objWriter->startElement('a:defRPr'); - $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); - $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); - $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); - $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); - $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); - $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '300000'); - $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-250000'); - - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill - $objWriter->startElement('a:solidFill'); - $this->writeColor($objWriter, $series->getFont()->getColor()); - $objWriter->endElement(); - // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr $objWriter->startElement('a:defRPr'); $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); From 98b9b7fb80e03b06742a701ab3c6846a248f615e Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 13 Feb 2025 08:45:35 +0100 Subject: [PATCH 6/7] Fixed Doughnut --- .../Writer/PowerPoint2007/PptCharts.php | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php index 54272e281..73dd3eb1b 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php @@ -1247,9 +1247,7 @@ protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, bool $in } /** - * Write Type Pie. - * - * @param XMLWriter $objWriter XML Writer + * Write Type Doughnut. */ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bool $includeSheet = false): void { @@ -1348,22 +1346,6 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo // c:dLbls\c:txPr\a:p $objWriter->startElement('a:p'); - $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0'); - $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); - - // c:dLbls\c:txPr - $objWriter->startElement('c:txPr'); - $objWriter->writeElement('a:bodyPr', null); - $objWriter->writeElement('a:lstStyle', null); - - // c:dLbls\c:txPr\a:p - $objWriter->startElement('a:p'); - // c:dLbls\c:txPr\a:p\a:pPr $objWriter->startElement('a:pPr'); @@ -1406,6 +1388,14 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo // c:dLbls\c:txPr\ $objWriter->endElement(); + $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0'); + $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); + $separator = $series->getSeparator(); if (!empty($separator) && PHP_EOL != $separator) { // c:dLbls\c:separator From 7a1dc0291d8ce6f367ff956f8e0b6dd7cd1ac8be Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 13 Feb 2025 14:15:41 +0100 Subject: [PATCH 7/7] Fixed PHPStan --- phpstan.neon.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index c8b77e498..071df7986 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -24,7 +24,7 @@ parameters: - '#^Parameter \#1 \$image of function imagesy expects GdImage, resource given\.#' - '#^Parameter \#1 \$image of function imagealphablending expects GdImage, resource given\.#' - '#^Parameter \#1 \$image of function imagesavealpha expects GdImage, resource given\.#' - # # PHP 8.0 & Attribute + ## PHP 8.0 & Attribute - '#^Attribute class PHPUnit\\Framework\\Attributes\\DataProvider does not exist\.#' ## Remove after remove ArrayObject