diff --git a/src/PhpSpreadsheet/Reader/Xlsx/Chart.php b/src/PhpSpreadsheet/Reader/Xlsx/Chart.php index cf77a7f2..55365a17 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/Chart.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/Chart.php @@ -228,7 +228,7 @@ class Chart case 'doughnutChart': case 'pieChart': case 'pie3DChart': - $explosion = isset($chartDetail->ser->explosion); + $explosion = self::getAttribute($chartDetail->ser->explosion, 'val', 'string'); $plotSer = $this->chartDataSeries($chartDetail, $chartDetailKey); $plotSer->setPlotStyle("$explosion"); $plotSeries[] = $plotSer; diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Chart.php b/src/PhpSpreadsheet/Writer/Xlsx/Chart.php index 356b44e9..8d01038b 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Chart.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Chart.php @@ -875,10 +875,6 @@ class Chart extends WriterPart $objWriter->writeAttribute('val', "$val"); $objWriter->endElement(); // c:idx - $objWriter->startElement('c:bubble3D'); - $objWriter->writeAttribute('val', '0'); - $objWriter->endElement(); // c:bubble3D - $objWriter->startElement('c:spPr'); $this->writeColor($objWriter, $fillColor); $objWriter->endElement(); // c:spPr @@ -1052,13 +1048,11 @@ class Chart extends WriterPart $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries(); if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) { - if ($plotGroup->getPlotStyle() !== null) { - $plotStyle = $plotGroup->getPlotStyle(); - if ($plotStyle) { - $objWriter->startElement('c:explosion'); - $objWriter->writeAttribute('val', '25'); - $objWriter->endElement(); - } + $plotStyle = $plotGroup->getPlotStyle(); + if (is_numeric($plotStyle)) { + $objWriter->startElement('c:explosion'); + $objWriter->writeAttribute('val', $plotStyle); + $objWriter->endElement(); } } diff --git a/tests/PhpSpreadsheetTests/Chart/Issue2506Test.php b/tests/PhpSpreadsheetTests/Chart/Issue2506Test.php new file mode 100644 index 00000000..a2a14c9d --- /dev/null +++ b/tests/PhpSpreadsheetTests/Chart/Issue2506Test.php @@ -0,0 +1,73 @@ +setIncludeCharts(true); + } + + public function writeCharts(XlsxWriter $writer): void + { + $writer->setIncludeCharts(true); + } + + public function testDataSeriesValues(): void + { + $reader = new XlsxReader(); + self::readCharts($reader); + $spreadsheet = $reader->load(self::DIRECTORY . 'issue.2506.xlsx'); + $worksheet = $spreadsheet->getActiveSheet(); + $charts = $worksheet->getChartCollection(); + self::assertCount(4, $charts); + $originalChart1 = $charts[0]; + self::assertNotNull($originalChart1); + $originalPlotArea1 = $originalChart1->getPlotArea(); + self::assertNotNull($originalPlotArea1); + $originalPlotSeries1 = $originalPlotArea1->getPlotGroup(); + self::assertCount(1, $originalPlotSeries1); + self::assertSame('0', $originalPlotSeries1[0]->getPlotStyle()); + $originalChart2 = $charts[1]; + self::assertNotNull($originalChart2); + $originalPlotArea2 = $originalChart2->getPlotArea(); + self::assertNotNull($originalPlotArea2); + $originalPlotSeries2 = $originalPlotArea2->getPlotGroup(); + self::assertCount(1, $originalPlotSeries2); + self::assertSame('5', $originalPlotSeries2[0]->getPlotStyle()); + + /** @var callable */ + $callableReader = [$this, 'readCharts']; + /** @var callable */ + $callableWriter = [$this, 'writeCharts']; + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter); + $spreadsheet->disconnectWorksheets(); + + $sheet = $reloadedSpreadsheet->getActiveSheet(); + $charts2 = $sheet->getChartCollection(); + self::assertCount(4, $charts2); + $chart1 = $charts[0]; + self::assertNotNull($chart1); + $plotArea1 = $chart1->getPlotArea(); + self::assertNotNull($plotArea1); + $plotSeries1 = $plotArea1->getPlotGroup(); + self::assertCount(1, $plotSeries1); + self::assertSame('0', $plotSeries1[0]->getPlotStyle()); + $chart2 = $charts[1]; + self::assertNotNull($chart2); + $plotArea2 = $chart2->getPlotArea(); + self::assertNotNull($plotArea2); + $plotSeries2 = $plotArea2->getPlotGroup(); + self::assertCount(1, $plotSeries2); + self::assertSame('5', $plotSeries2[0]->getPlotStyle()); + + $reloadedSpreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLSX/issue.2506.xlsx b/tests/data/Reader/XLSX/issue.2506.xlsx new file mode 100644 index 00000000..6b2c7fbc Binary files /dev/null and b/tests/data/Reader/XLSX/issue.2506.xlsx differ