diff --git a/docs/changes/1.2.0.md b/docs/changes/1.2.0.md index 5ed1d7578..6f7a22963 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-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 ## Bug fixes 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 diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php b/src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php index 40ac9d44a..73dd3eb1b 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()) { @@ -1204,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 { @@ -1278,83 +1319,92 @@ 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'); + + // 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 - $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\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'); + $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 +1465,103 @@ protected function writeTypePie(XMLWriter $objWriter, Pie $subject, bool $includ $objWriter->endElement(); } - // 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(); - } + // 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: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 +1645,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 +1814,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 +2009,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 +2191,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());