mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-08-26 03:38:33 +00:00
b661d31887
This is a start in addressing issue #2965 (and earlier issue #749). Chart Titles are usually entered as strings or Rich Text strings, and PhpSpreadsheet supports that. They can also be entered as formulas (typically a pointer to a cell with the title text), and, not only did PhpSpreadsheet not support that, it threw an exception when reading a spreadsheet that did so. This change does: - eliminate the exception - set a static chart title when it can determine it from the Xml This change does not: - fully support dynamic titles (e.g. if you change the contents of the source cell, or delete or insert cells or rows or columns) - permit the user to set the title to a formula - allow the use of formulas when writing a chart title to a spreadsheet - provide styling for titles when it has read them as a formula
43 lines
1.6 KiB
PHP
43 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Chart;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class Issue2965Test extends TestCase
|
|
{
|
|
private const DIRECTORY = 'tests' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'Reader' . DIRECTORY_SEPARATOR . 'XLSX' . DIRECTORY_SEPARATOR;
|
|
|
|
public function testPreliminaries(): void
|
|
{
|
|
$file = 'zip://';
|
|
$file .= self::DIRECTORY . 'issue.2965.xlsx';
|
|
$file .= '#xl/charts/chart1.xml';
|
|
$data = file_get_contents($file);
|
|
// confirm that file contains expected namespaced xml tag
|
|
if ($data === false) {
|
|
self::fail('Unable to read file');
|
|
} else {
|
|
self::assertStringContainsString('<c:title><c:tx><c:strRef><c:f>Sheet1!$A$1</c:f><c:strCache><c:ptCount val="1"/><c:pt idx="0"><c:v>NewTitle</c:v></c:pt></c:strCache></c:strRef></c:tx>', $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();
|
|
}
|
|
}
|