Ask questionsThe filename is not recognised as an OLE file
This is:
- [x] a bug report
Not even sure if this is a bug report or a feature request as I could not find if this type of XLS file is supported.
PhpSpreadsheet to read the file as I can open it just fine in OpenOffice.
Trying to read the file I get the error The filename products.xls is not recognised as an OLE file trying to read it as Xls. Trying to read it as Xml because the content is just XML, generates a lot of PHP warnings:
HP Warning: simplexml_load_string(): Entity: line 1261: parser error : Entity 'iota' not defined in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
PHP Warning: simplexml_load_string(): Οι Κάνφιλντ και & in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
PHP Warning: simplexml_load_string(): ^ in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
PHP Warning: simplexml_load_string(): Entity: line 1261: parser error : Detected an entity reference loop in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
PHP Warning: simplexml_load_string(): Οι Κάνφιλντ και & in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
PHP Warning: simplexml_load_string(): ^ in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php on line 120
The file used in this example: ProductsAPI-14-06-2021.xls
Please provide a Minimal, Complete, and Verifiable example of code that exhibits the issue without relying on an external Excel file or a web server:
This is trying to read it as XLS:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
require __DIR__ . '/vendor/autoload.php';
$reader = IOFactory::createReader('Xls');
$reader->setLoadAllSheets();
$spreadsheet = $reader->load('products.xls');
This is trying to read it as XML:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
require __DIR__ . '/vendor/autoload.php';
$reader = IOFactory::createReader('Xml');
$reader->setLoadAllSheets();
$spreadsheet = $reader->load('products.xls');
I have also tried it with this code:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
require __DIR__ . '/vendor/autoload.php';
$excel = IOFactory::load('products.xls');
That results in the same output as trying to read it as an XML file above.
1.18.0
Answer
questions
roland-d
Hello Mark, thank you for the detailed explanation. I was wondering about the CDATA tags but makes sense they should be used in this case.
It might be possible to add a stream filter to the Xml Reader that would convert the HTML Entities to valid XML Entities before it's passed to simplexml_load_string(), but I'd have to investigate that further
Let me know if there is anything I can do to help.
Related questions