Merge branch 'master' into sorttoarray

This commit is contained in:
oleibman
2023-12-23 07:23:03 -08:00
committed by GitHub
11 changed files with 312 additions and 76 deletions
@@ -335,7 +335,7 @@ $helper->renderChart($chart, __FILE__);
$spreadsheet->setActiveSheetIndex(1); $spreadsheet->setActiveSheetIndex(1);
// Save Excel 2007 file // Save Excel 2007 file
$helper->write($spreadsheet, __FILE__, ['Xlsx'], true); $helper->write($spreadsheet, __FILE__, ['Xlsx'], true, resetActiveSheet: false);
$spreadsheet->disconnectWorksheets(); $spreadsheet->disconnectWorksheets();
function dateRange(int $nrows, Spreadsheet $wrkbk): array function dateRange(int $nrows, Spreadsheet $wrkbk): array
@@ -270,4 +270,4 @@ $helper->renderChart($chart, __FILE__);
$spreadsheet->setActiveSheetIndex(1); $spreadsheet->setActiveSheetIndex(1);
// Save Excel 2007 file // Save Excel 2007 file
$helper->write($spreadsheet, __FILE__, ['Xlsx'], true); $helper->write($spreadsheet, __FILE__, ['Xlsx'], true, resetActiveSheet: false);
@@ -131,4 +131,4 @@ $helper->renderChart($chart, __FILE__);
$spreadsheet->setActiveSheetIndex(1); $spreadsheet->setActiveSheetIndex(1);
// Save Excel 2007 file // Save Excel 2007 file
$helper->write($spreadsheet, __FILE__, ['Xlsx'], true); $helper->write($spreadsheet, __FILE__, ['Xlsx'], true, resetActiveSheet: false);
+42 -1
View File
@@ -49,6 +49,8 @@ class Axis extends Properties
private ?AxisText $axisText = null; private ?AxisText $axisText = null;
private ?Title $dispUnitsTitle = null;
/** /**
* Axis Options. * Axis Options.
* *
@@ -70,6 +72,28 @@ class Axis extends Properties
'majorTimeUnit' => self::TIME_UNIT_YEARS, 'majorTimeUnit' => self::TIME_UNIT_YEARS,
'minorTimeUnit' => self::TIME_UNIT_MONTHS, 'minorTimeUnit' => self::TIME_UNIT_MONTHS,
'baseTimeUnit' => self::TIME_UNIT_DAYS, 'baseTimeUnit' => self::TIME_UNIT_DAYS,
'logBase' => null,
'dispUnitsBuiltIn' => null,
];
public const DISP_UNITS_HUNDREDS = 'hundreds';
public const DISP_UNITS_THOUSANDS = 'thousands';
public const DISP_UNITS_TEN_THOUSANDS = 'tenThousands';
public const DISP_UNITS_HUNDRED_THOUSANDS = 'hundredThousands';
public const DISP_UNITS_MILLIONS = 'millions';
public const DISP_UNITS_TEN_MILLIONS = 'tenMillions';
public const DISP_UNITS_HUNDRED_MILLIONS = 'hundredMillions';
public const DISP_UNITS_BILLIONS = 'billions';
public const DISP_UNITS_TRILLIONS = 'trillions';
public const DISP_UNITS_BUILTIN_INT = [
100 => self::DISP_UNITS_HUNDREDS,
1000 => self::DISP_UNITS_THOUSANDS,
10000 => self::DISP_UNITS_TEN_THOUSANDS,
100000 => self::DISP_UNITS_HUNDRED_THOUSANDS,
1000000 => self::DISP_UNITS_MILLIONS,
10000000 => self::DISP_UNITS_TEN_MILLIONS,
100000000 => self::DISP_UNITS_HUNDRED_MILLIONS,
1000000000 => self::DISP_UNITS_BILLIONS,
1000000000000 => self::DISP_UNITS_TRILLIONS,
]; ];
/** /**
@@ -149,7 +173,9 @@ class Axis extends Properties
?string $hidden = null, ?string $hidden = null,
?string $baseTimeUnit = null, ?string $baseTimeUnit = null,
?string $majorTimeUnit = null, ?string $majorTimeUnit = null,
?string $minorTimeUnit = null ?string $minorTimeUnit = null,
null|float|int|string $logBase = null,
?string $dispUnitsBuiltIn = null
): void { ): void {
$this->axisOptions['axis_labels'] = $axisLabels; $this->axisOptions['axis_labels'] = $axisLabels;
$this->setAxisOption('horizontal_crosses_value', $horizontalCrossesValue); $this->setAxisOption('horizontal_crosses_value', $horizontalCrossesValue);
@@ -166,6 +192,8 @@ class Axis extends Properties
$this->setAxisOption('baseTimeUnit', $baseTimeUnit); $this->setAxisOption('baseTimeUnit', $baseTimeUnit);
$this->setAxisOption('majorTimeUnit', $majorTimeUnit); $this->setAxisOption('majorTimeUnit', $majorTimeUnit);
$this->setAxisOption('minorTimeUnit', $minorTimeUnit); $this->setAxisOption('minorTimeUnit', $minorTimeUnit);
$this->setAxisOption('logBase', $logBase);
$this->setAxisOption('dispUnitsBuiltIn', $dispUnitsBuiltIn);
} }
/** /**
@@ -317,6 +345,18 @@ class Axis extends Properties
return $this->noFill; return $this->noFill;
} }
public function setDispUnitsTitle(?Title $dispUnitsTitle): self
{
$this->dispUnitsTitle = $dispUnitsTitle;
return $this;
}
public function getDispUnitsTitle(): ?Title
{
return $this->dispUnitsTitle;
}
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
@@ -326,6 +366,7 @@ class Axis extends Properties
$this->majorGridlines = ($this->majorGridlines === null) ? null : clone $this->majorGridlines; $this->majorGridlines = ($this->majorGridlines === null) ? null : clone $this->majorGridlines;
$this->majorGridlines = ($this->minorGridlines === null) ? null : clone $this->minorGridlines; $this->majorGridlines = ($this->minorGridlines === null) ? null : clone $this->minorGridlines;
$this->axisText = ($this->axisText === null) ? null : clone $this->axisText; $this->axisText = ($this->axisText === null) ? null : clone $this->axisText;
$this->dispUnitsTitle = ($this->dispUnitsTitle === null) ? null : clone $this->dispUnitsTitle;
$this->fillColor = clone $this->fillColor; $this->fillColor = clone $this->fillColor;
} }
} }
+7 -4
View File
@@ -16,7 +16,7 @@ class Title
/** /**
* Title Caption. * Title Caption.
* *
* @var array|RichText|string * @var null|array|RichText|string may be null
*/ */
private $caption = ''; private $caption = '';
@@ -39,7 +39,7 @@ class Title
/** /**
* Create a new Title. * Create a new Title.
* *
* @param array|RichText|string $caption * @param null|array|RichText|string $caption may be null
* @param bool $overlay * @param bool $overlay
*/ */
public function __construct($caption = '', ?Layout $layout = null, $overlay = false) public function __construct($caption = '', ?Layout $layout = null, $overlay = false)
@@ -52,7 +52,7 @@ class Title
/** /**
* Get caption. * Get caption.
* *
* @return array|RichText|string * @return null|array|RichText|string may be null
*/ */
public function getCaption() public function getCaption()
{ {
@@ -68,6 +68,9 @@ class Title
} }
} }
$caption = $this->caption; $caption = $this->caption;
if ($caption === null) {
return '';
}
if (is_string($caption)) { if (is_string($caption)) {
return $caption; return $caption;
} }
@@ -91,7 +94,7 @@ class Title
/** /**
* Set caption. * Set caption.
* *
* @param array|RichText|string $caption * @param null|array|RichText|string $caption may be null
* *
* @return $this * @return $this
*/ */
+4 -3
View File
@@ -111,13 +111,14 @@ class Sample
/** /**
* Write documents. * Write documents.
* *
* @param string $filename
* @param string[] $writers * @param string[] $writers
*/ */
public function write(Spreadsheet $spreadsheet, $filename, array $writers = ['Xlsx', 'Xls'], bool $withCharts = false, ?callable $writerCallback = null): void public function write(Spreadsheet $spreadsheet, string $filename, array $writers = ['Xlsx', 'Xls'], bool $withCharts = false, ?callable $writerCallback = null, bool $resetActiveSheet = true): void
{ {
// Set active sheet index to the first sheet, so Excel opens this as the first sheet // Set active sheet index to the first sheet, so Excel opens this as the first sheet
$spreadsheet->setActiveSheetIndex(0); if ($resetActiveSheet) {
$spreadsheet->setActiveSheetIndex(0);
}
// Write documents // Write documents
foreach ($writers as $writerType) { foreach ($writers as $writerType) {
+12 -1
View File
@@ -494,7 +494,7 @@ class Chart
private function chartTitle(SimpleXMLElement $titleDetails): Title private function chartTitle(SimpleXMLElement $titleDetails): Title
{ {
$caption = []; $caption = null;
$titleLayout = null; $titleLayout = null;
$titleOverlay = false; $titleOverlay = false;
$titleFormula = null; $titleFormula = null;
@@ -503,6 +503,7 @@ class Chart
$chartDetail = Xlsx::testSimpleXml($chartDetail); $chartDetail = Xlsx::testSimpleXml($chartDetail);
switch ($titleDetailKey) { switch ($titleDetailKey) {
case 'tx': case 'tx':
$caption = [];
if (isset($chartDetail->rich)) { if (isset($chartDetail->rich)) {
$titleDetails = $chartDetail->rich->children($this->aNamespace); $titleDetails = $chartDetail->rich->children($this->aNamespace);
foreach ($titleDetails as $titleKey => $titleDetail) { foreach ($titleDetails as $titleKey => $titleDetail) {
@@ -1518,6 +1519,13 @@ class Chart
if (isset($chartDetail->crossBetween)) { if (isset($chartDetail->crossBetween)) {
$whichAxis->setCrossBetween((string) self::getAttributeString($chartDetail->crossBetween, 'val')); $whichAxis->setCrossBetween((string) self::getAttributeString($chartDetail->crossBetween, 'val'));
} }
if (isset($chartDetail->dispUnits, $chartDetail->dispUnits->builtInUnit)) {
$whichAxis->setAxisOption('dispUnitsBuiltIn', (string) self::getAttributeString($chartDetail->dispUnits->builtInUnit, 'val'));
if (isset($chartDetail->dispUnits->dispUnitsLbl)) {
$whichAxis->setDispUnitsTitle(new Title());
// TODO parse title elements
}
}
if (isset($chartDetail->majorTickMark)) { if (isset($chartDetail->majorTickMark)) {
$whichAxis->setAxisOption('major_tick_mark', (string) self::getAttributeString($chartDetail->majorTickMark, 'val')); $whichAxis->setAxisOption('major_tick_mark', (string) self::getAttributeString($chartDetail->majorTickMark, 'val'));
} }
@@ -1533,6 +1541,9 @@ class Chart
if (isset($chartDetail->crossesAt)) { if (isset($chartDetail->crossesAt)) {
$whichAxis->setAxisOption('horizontal_crosses_value', (string) self::getAttributeString($chartDetail->crossesAt, 'val')); $whichAxis->setAxisOption('horizontal_crosses_value', (string) self::getAttributeString($chartDetail->crossesAt, 'val'));
} }
if (isset($chartDetail->scaling->logBase)) {
$whichAxis->setAxisOption('logBase', (string) self::getAttributeString($chartDetail->scaling->logBase, 'val'));
}
if (isset($chartDetail->scaling->orientation)) { if (isset($chartDetail->scaling->orientation)) {
$whichAxis->setAxisOption('orientation', (string) self::getAttributeString($chartDetail->scaling->orientation, 'val')); $whichAxis->setAxisOption('orientation', (string) self::getAttributeString($chartDetail->scaling->orientation, 'val'));
} }
+102 -64
View File
@@ -158,38 +158,40 @@ class Chart extends WriterPart
} }
$objWriter->startElement('c:title'); $objWriter->startElement('c:title');
$objWriter->startElement('c:tx');
$objWriter->startElement('c:rich');
$objWriter->startElement('a:bodyPr');
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement();
$objWriter->startElement('a:p');
$objWriter->startElement('a:pPr');
$objWriter->startElement('a:defRPr');
$objWriter->endElement();
$objWriter->endElement();
$caption = $title->getCaption(); $caption = $title->getCaption();
if (is_array($caption)) { if ($caption !== null) {
$caption = $caption[0] ?? ''; $objWriter->startElement('c:tx');
} $objWriter->startElement('c:rich');
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); $objWriter->startElement('a:bodyPr');
$objWriter->endElement(); $objWriter->endElement(); // a:bodyPr
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement(); // a:lstStyle
$objWriter->startElement('a:p');
$objWriter->startElement('a:pPr');
$objWriter->startElement('a:defRPr');
$objWriter->endElement(); // a:defRPr
$objWriter->endElement(); // a:pPr
if (is_array($caption)) {
$caption = $caption[0] ?? '';
}
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); // a:p
$objWriter->endElement(); // c:rich
$objWriter->endElement(); // c:tx
}
$this->writeLayout($objWriter, $title->getLayout()); $this->writeLayout($objWriter, $title->getLayout());
$objWriter->startElement('c:overlay'); $objWriter->startElement('c:overlay');
$objWriter->writeAttribute('val', ($title->getOverlay()) ? '1' : '0'); $objWriter->writeAttribute('val', ($title->getOverlay()) ? '1' : '0');
$objWriter->endElement(); $objWriter->endElement(); // c:overlay
$objWriter->endElement(); $objWriter->endElement(); // c:title
} }
/** /**
@@ -587,6 +589,14 @@ class Chart extends WriterPart
} }
$objWriter->startElement('c:scaling'); $objWriter->startElement('c:scaling');
if (is_numeric($yAxis->getAxisOptionsProperty('logBase'))) {
$logBase = $yAxis->getAxisOptionsProperty('logBase') + 0;
if ($logBase >= 2 && $logBase <= 1000) {
$objWriter->startElement('c:logBase');
$objWriter->writeAttribute('val', (string) $logBase);
$objWriter->endElement();
}
}
if ($yAxis->getAxisOptionsProperty('maximum') !== null) { if ($yAxis->getAxisOptionsProperty('maximum') !== null) {
$objWriter->startElement('c:max'); $objWriter->startElement('c:max');
$objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('maximum')); $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('maximum'));
@@ -632,35 +642,37 @@ class Chart extends WriterPart
if ($xAxisLabel !== null) { if ($xAxisLabel !== null) {
$objWriter->startElement('c:title'); $objWriter->startElement('c:title');
$objWriter->startElement('c:tx');
$objWriter->startElement('c:rich');
$objWriter->startElement('a:bodyPr');
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement();
$objWriter->startElement('a:p');
$caption = $xAxisLabel->getCaption(); $caption = $xAxisLabel->getCaption();
if (is_array($caption)) { if ($caption !== null) {
$caption = $caption[0]; $objWriter->startElement('c:tx');
} $objWriter->startElement('c:rich');
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); $objWriter->startElement('a:bodyPr');
$objWriter->endElement(); $objWriter->endElement(); // a:bodyPr
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement(); // a::lstStyle
$objWriter->startElement('a:p');
if (is_array($caption)) {
$caption = $caption[0];
}
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); // a:p
$objWriter->endElement(); // c:rich
$objWriter->endElement(); // c:tx
}
$layout = $xAxisLabel->getLayout(); $layout = $xAxisLabel->getLayout();
$this->writeLayout($objWriter, $layout); $this->writeLayout($objWriter, $layout);
$objWriter->startElement('c:overlay'); $objWriter->startElement('c:overlay');
$objWriter->writeAttribute('val', '0'); $objWriter->writeAttribute('val', '0');
$objWriter->endElement(); $objWriter->endElement(); // c:overlay
$objWriter->endElement(); $objWriter->endElement(); // c:title
} }
$objWriter->startElement('c:numFmt'); $objWriter->startElement('c:numFmt');
@@ -796,6 +808,14 @@ class Chart extends WriterPart
} }
$objWriter->startElement('c:scaling'); $objWriter->startElement('c:scaling');
if (is_numeric($xAxis->getAxisOptionsProperty('logBase'))) {
$logBase = $xAxis->getAxisOptionsProperty('logBase') + 0;
if ($logBase >= 2 && $logBase <= 1000) {
$objWriter->startElement('c:logBase');
$objWriter->writeAttribute('val', (string) $logBase);
$objWriter->endElement();
}
}
if ($xAxis->getAxisOptionsProperty('maximum') !== null) { if ($xAxis->getAxisOptionsProperty('maximum') !== null) {
$objWriter->startElement('c:max'); $objWriter->startElement('c:max');
@@ -845,26 +865,28 @@ class Chart extends WriterPart
if ($yAxisLabel !== null) { if ($yAxisLabel !== null) {
$objWriter->startElement('c:title'); $objWriter->startElement('c:title');
$objWriter->startElement('c:tx');
$objWriter->startElement('c:rich');
$objWriter->startElement('a:bodyPr');
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement();
$objWriter->startElement('a:p');
$caption = $yAxisLabel->getCaption(); $caption = $yAxisLabel->getCaption();
if (is_array($caption)) { if ($caption !== null) {
$caption = $caption[0]; $objWriter->startElement('c:tx');
} $objWriter->startElement('c:rich');
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); $objWriter->startElement('a:bodyPr');
$objWriter->endElement(); $objWriter->endElement(); // a:bodyPr
$objWriter->endElement();
$objWriter->startElement('a:lstStyle');
$objWriter->endElement(); // a:lstStyle
$objWriter->startElement('a:p');
if (is_array($caption)) {
$caption = $caption[0];
}
$this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
$objWriter->endElement(); // a:p
$objWriter->endElement(); // c:rich
$objWriter->endElement(); // c:tx
}
if ($groupType !== DataSeries::TYPE_BUBBLECHART) { if ($groupType !== DataSeries::TYPE_BUBBLECHART) {
$layout = $yAxisLabel->getLayout(); $layout = $yAxisLabel->getLayout();
@@ -873,9 +895,9 @@ class Chart extends WriterPart
$objWriter->startElement('c:overlay'); $objWriter->startElement('c:overlay');
$objWriter->writeAttribute('val', '0'); $objWriter->writeAttribute('val', '0');
$objWriter->endElement(); $objWriter->endElement(); // c:overlay
$objWriter->endElement(); $objWriter->endElement(); // c:title
} }
$objWriter->startElement('c:numFmt'); $objWriter->startElement('c:numFmt');
@@ -950,6 +972,22 @@ class Chart extends WriterPart
$objWriter->endElement(); $objWriter->endElement();
} }
if ($xAxis->getAxisType() === Axis::AXIS_TYPE_VALUE) {
$dispUnits = $xAxis->getAxisOptionsProperty('dispUnitsBuiltIn');
$dispUnits = is_numeric($dispUnits) ? (Axis::DISP_UNITS_BUILTIN_INT[(int) $dispUnits] ?? '') : $dispUnits;
if (in_array($dispUnits, Axis::DISP_UNITS_BUILTIN_INT, true)) {
$objWriter->startElement('c:dispUnits');
$objWriter->startElement('c:builtInUnit');
$objWriter->writeAttribute('val', $dispUnits);
$objWriter->endElement(); // c:builtInUnit
if ($xAxis->getDispUnitsTitle() !== null) {
// TODO output title elements
$objWriter->writeElement('c:dispUnitsLbl');
}
$objWriter->endElement(); // c:dispUnits
}
}
if ($xAxis->getAxisOptionsProperty('major_unit') !== null) { if ($xAxis->getAxisOptionsProperty('major_unit') !== null) {
$objWriter->startElement('c:majorUnit'); $objWriter->startElement('c:majorUnit');
$objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit')); $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit'));
@@ -0,0 +1,142 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Chart;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class Issue3833Test extends AbstractFunctional
{
// based on 33_Char_create_scatter2
public function readCharts(XlsxReader $reader): void
{
$reader->setIncludeCharts(true);
}
public function writeCharts(XlsxWriter $writer): void
{
$writer->setIncludeCharts(true);
}
public function testDisplayUnits1(): void
{
$reader = new XlsxReader();
$reader->setIncludeCharts(true);
$spreadsheet = $reader->load('tests/data/Reader/XLSX/issue.3833.units.xlsx');
/** @var callable */
$callableReader = [$this, 'readCharts'];
/** @var callable */
$callableWriter = [$this, 'writeCharts'];
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
$spreadsheet->disconnectWorksheets();
$sheet = $reloadedSpreadsheet->getSheetByNameOrThrow('charts');
$charts2 = $sheet->getChartCollection();
self::assertCount(1, $charts2);
$chart2 = $charts2[0];
self::assertNotNull($chart2);
$yAxis = $chart2->getChartAxisY();
$dispUnits = $yAxis->getAxisOptionsProperty('dispUnitsBuiltIn');
self::assertSame('tenThousands', $dispUnits);
$logBase = $yAxis->getAxisOptionsProperty('logBase');
self::assertNull($logBase);
$reloadedSpreadsheet->disconnectWorksheets();
}
public function testDisplayUnits2(): void
{
$reader = new XlsxReader();
$reader->setIncludeCharts(true);
$spreadsheet = $reader->load('tests/data/Reader/XLSX/issue.3833.units.xlsx');
$sheet1 = $spreadsheet->getSheetByNameOrThrow('charts');
$charts1 = $sheet1->getChartCollection();
self::assertCount(1, $charts1);
$chart1 = $charts1[0];
self::assertNotNull($chart1);
$yAxis1 = $chart1->getChartAxisY();
$yAxis1->setAxisOption('dispUnitsBuiltIn', 1000);
/** @var callable */
$callableReader = [$this, 'readCharts'];
/** @var callable */
$callableWriter = [$this, 'writeCharts'];
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
$spreadsheet->disconnectWorksheets();
$sheet = $reloadedSpreadsheet->getSheetByNameOrThrow('charts');
$charts2 = $sheet->getChartCollection();
self::assertCount(1, $charts2);
$chart2 = $charts2[0];
self::assertNotNull($chart2);
$yAxis = $chart2->getChartAxisY();
$dispUnits = $yAxis->getAxisOptionsProperty('dispUnitsBuiltIn');
self::assertSame('thousands', $dispUnits);
$logBase = $yAxis->getAxisOptionsProperty('logBase');
self::assertNull($logBase);
$reloadedSpreadsheet->disconnectWorksheets();
}
public function testDisplayUnits3(): void
{
$reader = new XlsxReader();
$reader->setIncludeCharts(true);
$spreadsheet = $reader->load('tests/data/Reader/XLSX/issue.3833.units.xlsx');
$sheet1 = $spreadsheet->getSheetByNameOrThrow('charts');
$charts1 = $sheet1->getChartCollection();
self::assertCount(1, $charts1);
$chart1 = $charts1[0];
self::assertNotNull($chart1);
$yAxis1 = $chart1->getChartAxisY();
$yAxis1->setDispUnitsTitle(null);
/** @var callable */
$callableReader = [$this, 'readCharts'];
/** @var callable */
$callableWriter = [$this, 'writeCharts'];
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
$spreadsheet->disconnectWorksheets();
$sheet = $reloadedSpreadsheet->getSheetByNameOrThrow('charts');
$charts2 = $sheet->getChartCollection();
self::assertCount(1, $charts2);
$chart2 = $charts2[0];
self::assertNotNull($chart2);
$yAxis = $chart2->getChartAxisY();
self::assertNull($yAxis->getDispUnitsTitle());
$reloadedSpreadsheet->disconnectWorksheets();
}
public function testLogBase(): void
{
$reader = new XlsxReader();
$reader->setIncludeCharts(true);
$spreadsheet = $reader->load('tests/data/Reader/XLSX/issue.3833.logarithm.xlsx');
/** @var callable */
$callableReader = [$this, 'readCharts'];
/** @var callable */
$callableWriter = [$this, 'writeCharts'];
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
$spreadsheet->disconnectWorksheets();
$sheet = $reloadedSpreadsheet->getSheetByNameOrThrow('charts');
$charts2 = $sheet->getChartCollection();
self::assertCount(1, $charts2);
$chart2 = $charts2[0];
self::assertNotNull($chart2);
$yAxis = $chart2->getChartAxisY();
$logBase = $yAxis->getAxisOptionsProperty('logBase');
self::assertSame('10', $logBase);
$dispUnits = $yAxis->getAxisOptionsProperty('dispUnitsBuiltIn');
self::assertNull($dispUnits);
$reloadedSpreadsheet->disconnectWorksheets();
}
}
Binary file not shown.
Binary file not shown.