From d418762a3346d4819d7d7b1b5ddf8cdc5d0fc086 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Thu, 29 Feb 2024 12:18:34 -0800 Subject: [PATCH] Win For Scrutinizer It pointed out a problem that I would have thought should result in test failure. Code corrected, and documentation updated to describe the unexpected behavior. --- docs/topics/accessing-cells.md | 3 +- .../Writer/Xlsx/ExplicitStyle0Test.php | 28 ++++++++----------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/topics/accessing-cells.md b/docs/topics/accessing-cells.md index 149172a57..67e177536 100644 --- a/docs/topics/accessing-cells.md +++ b/docs/topics/accessing-cells.md @@ -42,7 +42,7 @@ $spreadsheet->getActiveSheet() If you make a call to `getCell()`, and the cell doesn't already exist, then PhpSpreadsheet will create that cell for you. -### BEWARE: Cells assigned to variables as a Detached Reference +### BEWARE: Cells and Styles assigned to variables as a Detached Reference As an "in-memory" model, PHPSpreadsheet can be very demanding of memory, particularly when working with large spreadsheets. One technique used to @@ -54,6 +54,7 @@ While this is not normally an issue, it can become significant if you assign the result of a call to `getCell()` to a variable. Any subsequent calls to retrieve other cells will change that pointer, although the cell object will still retain its data values. +This is also true when assigning a variable to the result of `getStyle()`. What does this mean? Consider the following code: diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/ExplicitStyle0Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/ExplicitStyle0Test.php index 57312dfba..af65bc9f3 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ExplicitStyle0Test.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ExplicitStyle0Test.php @@ -41,14 +41,12 @@ class ExplicitStyle0Test extends TestCase $reader = new XlsxReader(); $spreadsheet2 = $reader->load($this->outputFile); $sheet2 = $spreadsheet2->getActiveSheet(); - $styleA1 = $sheet2->getStyle('A1'); - self::assertTrue($styleA1->getFont()->getBold()); - self::assertFalse($styleA1->getFont()->getItalic()); - self::assertSame(Alignment::HORIZONTAL_CENTER, $styleA1->getAlignment()->getHorizontal()); - $styleA2 = $sheet2->getStyle('A2'); - self::assertTrue($styleA1->getFont()->getBold()); - self::assertTrue($styleA1->getFont()->getItalic()); - self::assertSame(Alignment::HORIZONTAL_CENTER, $styleA1->getAlignment()->getHorizontal()); + self::assertTrue($sheet2->getStyle('A1')->getFont()->getBold()); + self::assertFalse($sheet2->getStyle('A1')->getFont()->getItalic()); + self::assertSame(Alignment::HORIZONTAL_CENTER, $sheet2->getStyle('A1')->getAlignment()->getHorizontal()); + self::assertTrue($sheet2->getStyle('A2')->getFont()->getBold()); + self::assertTrue($sheet2->getStyle('A2')->getFont()->getItalic()); + self::assertSame(Alignment::HORIZONTAL_CENTER, $sheet2->getStyle('A2')->getAlignment()->getHorizontal()); $spreadsheet2->disconnectWorksheets(); $file = 'zip://'; @@ -82,14 +80,12 @@ class ExplicitStyle0Test extends TestCase $reader = new XlsxReader(); $spreadsheet2 = $reader->load($this->outputFile); $sheet2 = $spreadsheet2->getActiveSheet(); - $styleA1 = $sheet2->getStyle('A1'); - self::assertTrue($styleA1->getFont()->getBold()); - self::assertFalse($styleA1->getFont()->getItalic()); - self::assertSame(Alignment::HORIZONTAL_CENTER, $styleA1->getAlignment()->getHorizontal()); - $styleA2 = $sheet2->getStyle('A2'); - self::assertTrue($styleA1->getFont()->getBold()); - self::assertTrue($styleA1->getFont()->getItalic()); - self::assertSame(Alignment::HORIZONTAL_CENTER, $styleA1->getAlignment()->getHorizontal()); + self::assertTrue($sheet2->getStyle('A1')->getFont()->getBold()); + self::assertFalse($sheet2->getStyle('A1')->getFont()->getItalic()); + self::assertSame(Alignment::HORIZONTAL_CENTER, $sheet2->getStyle('A1')->getAlignment()->getHorizontal()); + self::assertTrue($sheet2->getStyle('A2')->getFont()->getBold()); + self::assertTrue($sheet2->getStyle('A2')->getFont()->getItalic()); + self::assertSame(Alignment::HORIZONTAL_CENTER, $sheet2->getStyle('A2')->getAlignment()->getHorizontal()); $spreadsheet2->disconnectWorksheets(); $file = 'zip://';