我正在使用 phpspreadsheet 库并测试上传的 Excel 文件。这些是我的代码
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$excel_file = $_FILES['excelFile']['tmp_name'];
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($excel_file);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($excel_file);
$worksheet = $spreadsheet->getActiveSheet();
foreach ($worksheet->getRowIterator() as $row) {
$cell_values = $row->toArray();
if (empty($cell_values[0]) || empty($cell_values[1]) || empty($cell_values[2])) {
$error = 'Error: Date, Sample and Isolate columns must not be empty in row ' . $row->getRowIndex();
error_log($error, 3, $log_file);
}
}
我看到此错误:致命错误:未捕获错误:在对应的行上调用未定义的方法 PhpOffice\PhpSpreadsheet\Worksheet\Row::toArray()
foreach ($worksheet->getRowIterator() as $row) { $cell_values = $row->toArray();
问题是什么?请帮助我。
抱歉回复太晚了...
Iterator不能直接访问Array,但将RowIterator和ColumnIterator结合在一起可以解决问题。
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$excel_file = $_FILES['excelFile']['tmp_name'];
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($excel_file);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($excel_file);
$worksheet = $spreadsheet->getActiveSheet();
foreach ($worksheet->getRowIterator() as $row) {
$row_idx = $row->getRowIndex();
foreach($worksheet->getColumnIterator() as $col ){
$col_idx = $col -> getColumnIndex();
$cell_value = $worksheet -> getCell($col_idx.$row_idx) -> getValue();
if (empty($cell_value)) {
$error = 'Error: Date, Sample and Isolate columns must not be empty in row ' . $row_idx;
error_log($error, 3, $log_file);
continue; //skip the loop
}
}
}