Phpspreadsheet:调用未定义的方法 PhpOffice\PhpSpreadsheet\Worksheet\Row::toArray()

问题描述 投票:0回答:1

我正在使用 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();

问题是什么?请帮助我。

php phpspreadsheet
1个回答
0
投票

抱歉回复太晚了...

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
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.