diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Chart.php b/src/PhpSpreadsheet/Writer/Xlsx/Chart.php
index db82f8bc..23b78a2f 100644
--- a/src/PhpSpreadsheet/Writer/Xlsx/Chart.php
+++ b/src/PhpSpreadsheet/Writer/Xlsx/Chart.php
@@ -1058,7 +1058,7 @@ class Chart extends WriterPart
$objWriter->startElement('c:ser');
$plotLabel = $plotGroup->getPlotLabelByIndex($plotSeriesIdx);
- if ($plotLabel) {
+ if ($plotLabel && $groupType !== DataSeries::TYPE_LINECHART) {
$fillColor = $plotLabel->getFillColor();
if ($fillColor !== null && !is_array($fillColor)) {
$objWriter->startElement('c:spPr');
@@ -1116,6 +1116,15 @@ class Chart extends WriterPart
if ($groupType == DataSeries::TYPE_STOCKCHART) {
$objWriter->startElement('a:noFill');
$objWriter->endElement();
+ } elseif ($plotLabel) {
+ $fillColor = $plotLabel->getFillColor();
+ if (is_string($fillColor)) {
+ $objWriter->startElement('a:solidFill');
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', $fillColor);
+ $objWriter->endElement();
+ $objWriter->endElement();
+ }
}
$objWriter->endElement();
$objWriter->endElement();
diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue589Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue589Test.php
new file mode 100644
index 00000000..82478fb9
--- /dev/null
+++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue589Test.php
@@ -0,0 +1,162 @@
+getActiveSheet();
+ $worksheet->fromArray(
+ [
+ [2010],
+ [12],
+ [56],
+ ]
+ );
+
+ $dataSeriesLabels = [
+ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$1', null, 1),
+ ];
+ $dataSeriesLabels[0]->setFillColor($color);
+ $dataSeriesValues = [
+ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$A$2:$A$3', null, 2),
+ ];
+
+ // Build the dataseries
+ $series = new DataSeries(
+ DataSeries::TYPE_LINECHART,
+ DataSeries::GROUPING_STACKED,
+ range(0, count($dataSeriesValues) - 1),
+ $dataSeriesLabels,
+ [],
+ $dataSeriesValues
+ );
+
+ // Set the series in the plot area
+ $plotArea = new PlotArea(null, [$series]);
+
+ // Create the chart
+ $chart = new Chart(
+ 'chart1',
+ null,
+ null,
+ $plotArea
+ );
+
+ // Add the chart to the worksheet
+ $worksheet->addChart($chart);
+
+ return $spreadsheet;
+ }
+
+ public function testLineChartFill(): void
+ {
+ $outputFilename = File::temporaryFilename();
+ $spreadsheet = $this->buildChartSpreadsheet('98B954');
+ $writer = new Writer($spreadsheet);
+ $writer->setIncludeCharts(true);
+ $writer->save($outputFilename);
+
+ $zip = new ZipArchive();
+ $zip->open($outputFilename);
+ $resultChart1Raw = $zip->getFromName('xl/charts/chart1.xml');
+ $zip->close();
+ unlink($outputFilename);
+
+ $dom = new DOMDocument();
+ if ($resultChart1Raw === false) {
+ self::fail('Unable to open the chart file');
+ } else {
+ $loaded = $dom->loadXML($resultChart1Raw);
+ if (!$loaded) {
+ self::fail('Unable to load the chart xml');
+ } else {
+ $series = $dom->getElementsByTagName('ser');
+ $firstSeries = $series->item(0);
+ if ($firstSeries === null) {
+ self::fail('The chart XML does not contain a \'ser\' tag!');
+ } else {
+ $spPrList = $firstSeries->getElementsByTagName('spPr');
+
+ // expect to see only one element with name 'c:spPr'
+ self::assertCount(1, $spPrList);
+
+ /** @var DOMNode $node */
+ $node = $spPrList->item(0); // Get the spPr element
+ $actualXml = $dom->saveXML($node);
+ if ($actualXml === false) {
+ self::fail('Failure saving the spPr element as xml string!');
+ } else {
+ self::assertXmlStringEqualsXmlString('', $actualXml);
+ }
+ }
+ }
+ }
+ }
+
+ public function testLineChartFillIgnoresColorArray(): void
+ {
+ $outputFilename = File::temporaryFilename();
+ $spreadsheet = $this->buildChartSpreadsheet(['98B954']);
+ $writer = new Writer($spreadsheet);
+ $writer->setIncludeCharts(true);
+ $writer->save($outputFilename);
+
+ $zip = new ZipArchive();
+ $zip->open($outputFilename);
+ $resultChart1Raw = $zip->getFromName('xl/charts/chart1.xml');
+ $zip->close();
+ unlink($outputFilename);
+
+ $dom = new DOMDocument();
+ if ($resultChart1Raw === false) {
+ self::fail('Unable to open the chart file');
+ } else {
+ $loaded = $dom->loadXML($resultChart1Raw);
+ if (!$loaded) {
+ self::fail('Unable to load the chart xml');
+ } else {
+ $series = $dom->getElementsByTagName('ser');
+ $firstSeries = $series->item(0);
+ if ($firstSeries === null) {
+ self::fail('The chart XML does not contain a \'ser\' tag!');
+ } else {
+ $spPrList = $firstSeries->getElementsByTagName('spPr');
+
+ // expect to see only one element with name 'c:spPr'
+ self::assertCount(1, $spPrList);
+
+ /** @var DOMNode $node */
+ $node = $spPrList->item(0); // Get the spPr element
+ $actualXml = $dom->saveXML($node);
+ if ($actualXml === false) {
+ self::fail('Failure saving the spPr element as xml string!');
+ } else {
+ self::assertXmlStringEqualsXmlString('', $actualXml);
+ }
+ }
+ }
+ }
+ }
+}