Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- Problem rendering line chart with missing plot label. [PR #4074](https://github.com/PHPOffice/PhpSpreadsheet/pull/4074)
- More RTL in Xlsx/Html Comments [Issue #4004](https://github.com/PHPOffice/PhpSpreadsheet/issues/4004) [PR #4065](https://github.com/PHPOffice/PhpSpreadsheet/pull/4065)
- Empty String in sharedStrings. [Issue #4063](https://github.com/PHPOffice/PhpSpreadsheet/issues/4063) [PR #4064](https://github.com/PHPOffice/PhpSpreadsheet/pull/4064)
- Ods Xml Reader and Whitespace Text Nodes. [Issue #804](https://github.com/PHPOffice/PhpSpreadsheet/issues/804) [PR #4087](https://github.com/PHPOffice/PhpSpreadsheet/pull/4087)
- Treat invalid formulas as strings. [Issue #1310](https://github.com/PHPOffice/PhpSpreadsheet/issues/1310) [PR #4073](https://github.com/PHPOffice/PhpSpreadsheet/pull/4073)

## 2024-05-11 - 2.1.0
Expand Down
3 changes: 3 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ allow you to read and write various spreadsheet file formats such as Excel and L
|CSV | ✓ | ✓ |
|PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately)| | ✓ |

Note - reading or writing certain aspects of a spreadsheet may not be supported in all formats. For more details, please consult
[Features Cross-reference](./references/features-cross-reference.md).

# Getting started

## Software requirements
Expand Down
50 changes: 27 additions & 23 deletions docs/references/features-cross-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: orange;">● <a href="#footnote6"><sup>6</sup></a></td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center;">N/A</td>
Expand Down Expand Up @@ -389,7 +389,7 @@
</tr>
<tr>
<td style="padding-left: 0.5em;"><strong>Conditional Formatting</strong></td>
<td style="text-align: center; color: orange;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
Expand All @@ -414,7 +414,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center;">N/A</td>
Expand Down Expand Up @@ -495,14 +495,14 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: orange;">● <a href="#footnote7"><sup>7</sup></a></td>
</tr>
<tr>
<td style="padding-left: 1em;">Number Format Mask</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;"></td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
Expand All @@ -517,7 +517,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: orange;">● <a href="#footnote7"><sup>7</sup></a></td>
</tr>
<tr>
<td style="padding-left: 2em;">Horizontal</td>
Expand Down Expand Up @@ -583,7 +583,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote7"><sup>7</sup></a></td>
</tr>
<tr>
<td style="padding-left: 2em;">Patterned</td>
Expand All @@ -605,7 +605,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote7"><sup>7</sup></a></td>
</tr>
<tr>
<td style="padding-left: 2em;">Font Face</td>
Expand Down Expand Up @@ -704,7 +704,7 @@
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: orange;">●</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote7"><sup>7</sup></a></td>
</tr>
<tr>
<td style="padding-left: 2em;">Line Style</td>
Expand Down Expand Up @@ -797,13 +797,13 @@
<tr>
<td style="padding-left: 2em;">Alignment</td>
<td style="text-align: center; color: red;">✖ <a href="#footnote3"><sup>3</sup></a></td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
</tr>
<tr>
<td style="padding-left: 2em;">Background Image</td>
Expand Down Expand Up @@ -929,7 +929,7 @@
<tr>
<td style="padding-left: 0.5em;"><a href="#setGetMacro"><strong>Macros</strong></a></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote5"><sup>5</sup</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
Expand All @@ -940,7 +940,7 @@
<tr>
<td style="padding-left: 0.5em;"><strong>Form Controls</strong></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote4"><sup>4</sup</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;">✖</td>
Expand Down Expand Up @@ -1001,6 +1001,10 @@
1. <span id="footnote1">Only text contents</span>
2. <span id="footnote2">Only BIFF8 files support Rich Text. Prior to that, comments could only be plain text</span>
3. <span id="footnote3">Only BIFF8 files support alignment and rotation. Prior to that, comments could only be unformatted text</span>
4. <span id="footnote4">Xlsx forms and controls can be read and written but not otherwise manipulated</span>
5. <span id="footnote5">Xlsx macros can be read and written; their values can be retrieved and changed, but only in a binary form which is unlikely to be useful</span>
6. <span id="footnote6">There is very limited support for reading styles from an Ods spreadsheet. Writing styles has better support, although Number Format is incomplete.</span>
7. <span id="footnote7">In most cases, Html reader processes only inline styles; styles provided by Css classes may be ignored.</span>

## Writers

Expand Down Expand Up @@ -1184,7 +1188,7 @@
<td style="padding-left: 1em;">Row Height/Column Width</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
Expand Down Expand Up @@ -1256,7 +1260,7 @@
<td style="padding-left: 1em;">Number Format Mask</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;"></td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
Expand Down Expand Up @@ -1472,10 +1476,10 @@
<td style="padding-left: 0.5em;"><strong>Merged Cells</strong></td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: green;">✔</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
</tr>
<tr>
<td style="padding-left: 0.5em;"><a href="#setGetComment"><strong>Cell Comments</strong></a></td>
Expand All @@ -1498,10 +1502,10 @@
<tr>
<td style="padding-left: 1em;">Alignment</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center;">N/A</td>
</tr>
<tr>
Expand Down Expand Up @@ -1606,7 +1610,7 @@
<tr>
<td style="padding-left: 0.5em;"><a href="#setGetMacro"><strong>Macros</strong></a></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: green;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote5"><sup>5</sup</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: red;">✖</td>
Expand All @@ -1615,7 +1619,7 @@
<tr>
<td style="padding-left: 0.5em;"><strong>Form Controls</strong></td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center; color: red;"></td>
<td style="text-align: center; color: orange;">● <a href="#footnote4"><sup>4</sup</td>
<td style="text-align: center; color: red;">✖</td>
<td style="text-align: center;">N/A</td>
<td style="text-align: center; color: red;">✖</td>
Expand Down Expand Up @@ -1803,8 +1807,8 @@
</tr>
<tr>
<td id="setGetMacro"><strong>Macros</strong></td>
<td>$spreadsheet->getMacrosCode();</td>
<td>$spreadsheet->setMacrosCode();</td>
<td>$spreadsheet->getMacrosCode();<a href="#footnote5"><sup>5</sup></td>
<td>$spreadsheet->setMacrosCode();<a href="#footnote5"><sup>5</sup></td>
</tr>
<tr>
<td id="setGetSecurity"><strong>Security</strong></td>
Expand Down
6 changes: 5 additions & 1 deletion src/PhpSpreadsheet/Reader/Ods.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use DOMDocument;
use DOMElement;
use DOMNode;
use DOMText;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Helper\Dimension as HelperDimension;
Expand Down Expand Up @@ -403,8 +404,11 @@ public function loadIntoExisting(string $filename, Spreadsheet $spreadsheet): Sp
}

$columnID = 'A';
/** @var DOMElement $cellData */
/** @var DOMElement|DOMText $cellData */
foreach ($childNode->childNodes as $cellData) {
if ($cellData instanceof DOMText) {
continue; // should just be whitespace
}
if ($this->getReadFilter() !== null) {
if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
if ($cellData->hasAttributeNS($tableNs, 'number-columns-repeated')) {
Expand Down
38 changes: 38 additions & 0 deletions tests/PhpSpreadsheetTests/Reader/Ods/Issue804Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;

use PhpOffice\PhpSpreadsheet\Reader\Ods;
use PHPUnit\Framework\TestCase;

class Issue804Test extends TestCase
{
public function testPreliminaries(): void
{
$file = 'zip://';
$file .= 'tests/data/Reader/Ods/issue.804.ods';
$file .= '#content.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('<table:table-row>
<table:table-cell office:value-type="string" table:number-rows-spanned="1" table:style-name="heading">
<text:p>Name</text:p>', $data);
}
}

public function testIssue2810(): void
{
// Whitespace between Xml nodes
$filename = 'tests/data/Reader/Ods/issue.804.ods';
$reader = new Ods();
$spreadsheet = $reader->load($filename);
$sheet = $spreadsheet->getActiveSheet();
self::assertSame('Straße', $sheet->getCell('G1')->getValue());
$spreadsheet->disconnectWorksheets();
}
}
Binary file added tests/data/Reader/Ods/issue.804.ods
Binary file not shown.