PhpSpreadsheet报错:Call to undefined method Row::toArray() 求助
问题原因及解决方案
错误根源
PhpOffice\PhpSpreadsheet\Worksheet\Row类并没有toArray()方法,你误将Worksheet类的方法用在了Row对象上,这就是触发致命错误的原因。
解决方案1:直接使用Worksheet的toArray()(推荐)
这是最简洁的实现方式,直接读取整个工作表的所有行数据为数组:
require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; $excel_file = $_FILES['excelFile']['tmp_name']; $reader = IOFactory::createReaderForFile($excel_file); $reader->setReadDataOnly(true); $spreadsheet = $reader->load($excel_file); $worksheet = $spreadsheet->getActiveSheet(); // 直接获取所有行的数组 $allRows = $worksheet->toArray(); foreach ($allRows as $rowOffset => $cellValues) { // 数组索引从0开始,对应Excel实际行号要+1 $actualRowNumber = $rowOffset + 1; if (empty($cellValues[0]) || empty($cellValues[1]) || empty($cellValues[2])) { $error = "Error: Date, Sample and Isolate columns must not be empty in row $actualRowNumber"; error_log($error, 3, $log_file); } }
解决方案2:使用RowIterator配合CellIterator
如果一定要用RowIterator遍历行,需要通过Row对象的getCellIterator()来逐个读取单元格值:
require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; $excel_file = $_FILES['excelFile']['tmp_name']; $reader = IOFactory::createReaderForFile($excel_file); $reader->setReadDataOnly(true); $spreadsheet = $reader->load($excel_file); $worksheet = $spreadsheet->getActiveSheet(); foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); // 设置为false以包含空单元格,避免遗漏列 $cellIterator->setIterateOnlyExistingCells(false); $cellValues = []; foreach ($cellIterator as $cell) { $cellValues[] = $cell->getValue(); } $rowIndex = $row->getRowIndex(); if (empty($cellValues[0]) || empty($cellValues[1]) || empty($cellValues[2])) { $error = "Error: Date, Sample and Isolate columns must not be empty in row $rowIndex"; error_log($error, 3, $log_file); } }
内容的提问来源于stack exchange,提问作者sridhar
相关产品推荐
相关产品推荐

