diff --git a/CHANGELOG.md b/CHANGELOG.md index f68cd66ea..051a28ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,6 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). - Recurse directories searching for font file. [Issue #2809](https://github.com/PHPOffice/PhpSpreadsheet/issues/2809) [PR #3830](https://github.com/PHPOffice/PhpSpreadsheet/pull/3830) - Reduce memory consumption of Worksheet::rangeToArray() when many empty rows are read. [Issue #3814](https://github.com/PHPOffice/PhpSpreadsheet/pull/3814) [PR #3834](https://github.com/PHPOffice/PhpSpreadsheet/pull/3834) - Reduce time used by Worksheet::rangeToArray() when many empty rows are read. [PR #3839](https://github.com/PHPOffice/PhpSpreadsheet/pull/3839) +- Html Reader Tolerate Invalid Sheet Title. [PR #3845](https://github.com/PHPOffice/PhpSpreadsheet/pull/3845) ## 1.29.0 - 2023-06-15 diff --git a/src/PhpSpreadsheet/Reader/Html.php b/src/PhpSpreadsheet/Reader/Html.php index 6fcf31d7d..0dc0f2818 100644 --- a/src/PhpSpreadsheet/Reader/Html.php +++ b/src/PhpSpreadsheet/Reader/Html.php @@ -9,6 +9,7 @@ use DOMText; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Document\Properties; +use PhpOffice\PhpSpreadsheet\Exception as SpreadsheetException; use PhpOffice\PhpSpreadsheet\Helper\Dimension as CssDimension; use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner; use PhpOffice\PhpSpreadsheet\Spreadsheet; @@ -345,7 +346,12 @@ class Html extends BaseReader { if ($child->nodeName === 'title') { $this->processDomElement($child, $sheet, $row, $column, $cellContent); - $sheet->setTitle($cellContent, true, true); + + try { + $sheet->setTitle($cellContent, true, true); + } catch (SpreadsheetException) { + // leave default title if too long or illegal chars + } $cellContent = ''; } else { $this->processDomElementSpanEtc($sheet, $row, $column, $cellContent, $child, $attributeArray); diff --git a/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php b/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php new file mode 100644 index 000000000..5b73784ed --- /dev/null +++ b/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php @@ -0,0 +1,38 @@ +getProperties() + ->setTitle('PhpSpreadsheet Table Test Document'); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->setCellValue('A1', 1); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Html'); + $spreadsheet->disconnectWorksheets(); + self::assertSame('Worksheet', $reloadedSpreadsheet->getActiveSheet()->getTitle()); + $reloadedSpreadsheet->disconnectWorksheets(); + } + + public static function providerTitles(): array + { + return [ + ['Worksheet', 'This title is just a bit too long'], + ['Worksheet', 'Invalid * character'], + ['Legitimate Title', 'Legitimate Title'], + ]; + } +}