From d5936172872d255a31855473c617f1b581bee07f Mon Sep 17 00:00:00 2001 From: redforks Date: Sun, 17 Apr 2022 23:27:28 +0800 Subject: [PATCH] Fix font index problem (#2642) * Fix font index problem * Update RichTextSizeTest.php Eliminate Phpstan failure. * Update RichTextSizeTest.php Eliminate now-unused import. --- src/PhpSpreadsheet/Reader/Xls.php | 9 +++++-- .../Reader/Xls/RichTextSizeTest.php | 22 ++++++++++++++++++ tests/data/Reader/XLS/RichTextFontSize.xls | Bin 0 -> 53760 bytes 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xls/RichTextSizeTest.php create mode 100644 tests/data/Reader/XLS/RichTextFontSize.xls diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index 402fea9f..d1f14ae1 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -3759,8 +3759,13 @@ class Xls extends BaseReader } else { $textRun = $richText->createTextRun($text); if (isset($fmtRuns[$i - 1])) { - $fontIndex = $fmtRuns[$i - 1]['fontIndex']; - + if ($fmtRuns[$i - 1]['fontIndex'] < 4) { + $fontIndex = $fmtRuns[$i - 1]['fontIndex']; + } else { + // this has to do with that index 4 is omitted in all BIFF versions for some stra nge reason + // check the OpenOffice documentation of the FONT record + $fontIndex = $fmtRuns[$i - 1]['fontIndex'] - 1; + } if (array_key_exists($fontIndex, $this->objFonts) === false) { $fontIndex = count($this->objFonts) - 1; } diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/RichTextSizeTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/RichTextSizeTest.php new file mode 100644 index 00000000..54274e8c --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xls/RichTextSizeTest.php @@ -0,0 +1,22 @@ +load($filename); + $sheet = $spreadsheet->getSheetByName('橱柜门板'); + self::assertNotNull($sheet); + $text = $sheet->getCell('L15')->getValue(); + $elements = $text->getRichTextElements(); + self::assertEquals(10, $elements[2]->getFont()->getSize()); + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLS/RichTextFontSize.xls b/tests/data/Reader/XLS/RichTextFontSize.xls new file mode 100644 index 0000000000000000000000000000000000000000..3edf47379c273edebb3c30c2484a4eb69a081fc6 GIT binary patch literal 53760 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 literal 0 HcmV?d00001