Ошибка чтения файла с листом PhpSpreadsheet за допустимые пределы

При попытке чтения из файла XLSX с помощью PhpSpreadsheet возникает следующая ошибка:

PHP Fatal error:  Uncaught PhpOffice\PhpSpreadsheet\Exception: Your requested sheet index: -1 is out of bounds. The actual number of sheets is 0. in C:\php\projects\stock\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Spreadsheet.php:678

Определенно существует рабочий лист, и мой приведенный ниже код для извлечения одной ячейки отлично работает, когда я удаляю таблицу и получаю только неформатированные данные.

$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();

$inputFileName = "path/to/temp_file_download.xlsx";
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$spreadsheet = $reader->load($inputFileName);
echo $cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(2, 2)->getValue();

Кажется, что сохранение файла в Excel позволяет ему работать нормально, однако Excel не жалуется, что он поврежден и т. Д. Я не могу контролировать фактическую электронную таблицу, созданную из внешнего источника.

Просто интересно, были ли у кого-нибудь подобные проблемы и есть ли идеи, как их обойти, или что я делаю не так?

Пытался использовать более старую версию PhpExcel, чтобы заставить это работать, однако возникают аналогичные проблемы, пока я снова не сохраню файл.

Также пробовали XLSXReader с аналогичными проблемами:

PHP Fatal error:  Uncaught Exception: File /xl/workbook.xml does not exist in the Excel file in C:\php\projects\stock\vendor\XLSXReader\XLSXReader.php:57
Stack trace:
#0 C:\php\projects\stock\vendor\XLSXReader\XLSXReader.php(70): XLSXReader->getEntryData()
#1 C:\php\projects\stock\vendor\XLSXReader\XLSXReader.php(47): XLSXReader->parse()
#2 C:\php\projects\stock\stock.php(17): XLSXReader->__construct()
#3 {main}
  thrown in C:\php\projects\stock\vendor\XLSXReader\XLSXReader.php on line 57

И видели много проблем в Интернете для людей, у которых есть проблемы с чтением этих файлов, созданных таким образом, но все еще не уверены в простом обходном пути.


person harri    schedule 01.07.2020    source источник


Ответы (1)


Добавление упомянутого ниже обходного пути для нестандартного xlsx, похоже, помогло!

https://github.com/PHPOffice/PHPExcel/issues/1187

Просто нужно добавить класс, расширяющий класс xlsx до phpspreadsheet, затем вызвать этот класс, и все работает!

person harri    schedule 01.07.2020