读取文件与PhpSpreadsheet工作表超出范围错误

时间:2020-07-01 12:26:43

标签: php phpspreadsheet phpoffice

尝试使用 PhpSpreadsheet XLSX 文件读取,但是出现以下错误:

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

对于在阅读这些区域创建的文件时遇到问题的人来说,在网上已经看到许多问题,但是仍然不确定是否有简单的解决方法。

1 个答案:

答案 0 :(得分:0)

添加以下针对非标准xlsx hack提到的解决方法似乎可以解决问题!

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

只需添加将xlsx类扩展到phpspreadsheet的类,然后调用该类即可,一切正常!