diff --git a/src/PhpSpreadsheet/Reader/Xlsx/Chart.php b/src/PhpSpreadsheet/Reader/Xlsx/Chart.php index 12ee0ade40..e7314d0bb1 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/Chart.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/Chart.php @@ -396,12 +396,20 @@ private function chartTitle(SimpleXMLElement $titleDetails): Title foreach ($titleDetails as $titleDetailKey => $chartDetail) { switch ($titleDetailKey) { case 'tx': - $titleDetails = $chartDetail->rich->children($this->aNamespace); - foreach ($titleDetails as $titleKey => $titleDetail) { - switch ($titleKey) { - case 'p': - $titleDetailPart = $titleDetail->children($this->aNamespace); - $caption[] = $this->parseRichText($titleDetailPart); + if (isset($chartDetail->rich)) { + $titleDetails = $chartDetail->rich->children($this->aNamespace); + foreach ($titleDetails as $titleKey => $titleDetail) { + switch ($titleKey) { + case 'p': + $titleDetailPart = $titleDetail->children($this->aNamespace); + $caption[] = $this->parseRichText($titleDetailPart); + } + } + } elseif (isset($chartDetail->strRef->strCache)) { + foreach ($chartDetail->strRef->strCache->pt as $pt) { + if (isset($pt->v)) { + $caption[] = (string) $pt->v; + } } } diff --git a/tests/PhpSpreadsheetTests/Chart/Issue2965Test.php b/tests/PhpSpreadsheetTests/Chart/Issue2965Test.php new file mode 100644 index 0000000000..8294d39b68 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Chart/Issue2965Test.php @@ -0,0 +1,42 @@ +Sheet1!$A$1NewTitle', $data); + } + } + + public function testChartTitleFormula(): void + { + $reader = new XlsxReader(); + $reader->setIncludeCharts(true); + $spreadsheet = $reader->load(self::DIRECTORY . 'issue.2965.xlsx'); + $worksheet = $spreadsheet->getActiveSheet(); + $charts = $worksheet->getChartCollection(); + self::assertCount(1, $charts); + $originalChart1 = $charts[0]; + self::assertNotNull($originalChart1); + $originalTitle1 = $originalChart1->getTitle(); + self::assertNotNull($originalTitle1); + self::assertSame('NewTitle', $originalTitle1->getCaptionText()); + + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLSX/issue.2965.xlsx b/tests/data/Reader/XLSX/issue.2965.xlsx new file mode 100644 index 0000000000..7c0672d396 Binary files /dev/null and b/tests/data/Reader/XLSX/issue.2965.xlsx differ