如何使用 PHP 中的 IReadFilter 读取 PhpOffice\PhpSpreadsheet 中的单元格?

How do you read cells in PhpOffice\PhpSpreadsheet using the IReadFilter in PHP?

我正在尝试从跨多个 sheet 的传播sheet 中读取两列。这方面的一个例子是:

Sheet One:        Sheet Two:        Sheet Three:        ETC...
A ..... V         A ..... V         A ..... V           <-- Two Columns I need
1       5         32      9         54      1           <-- Rows Below
2       8         33      2         55      3
3       9         34      7         56      8

到目前为止,我正在使用 PhpOffice\PHPSpreadsheetdocumentation 加载 Spreadsheet 以了解如何执行此操作。

综合文档中的所有信息后,我得出了这个结论:

class CustomXlsxReader implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{
    public function readCell($column, $row, $worksheetName = '') {
         return in_array($column, range('A','V'));
    }
}

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setLoadSheetsOnly(["A Coy", "B Coy", "C Coy", "S Coy", "HQ Coy"]);
$reader->setReadDataOnly(true);
$reader->setReadFilter(new CustomXlsxReader());
$spreadsheet = $reader->load($_FILES['xlsxFile']['tmp_name']); // I do not want to physically save the file as the data will be converted to a database for further distribution

我试图找到文档的阅读单元格部分并找到了这个:

$worksheet = $spreadsheet->getActiveSheet(); // Not sure how to change between these

foreach ($worksheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
        foreach ($cellIterator as $cell) {
            $cell = $cell->getValue(); // Not sure what column this is looping through
        }
    }

我可以看到 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter 有读取行的方法,但是,$spreadsheet 实例没有这个方法,我无法在我的生活中找到如何在文档中使用它。

现在如何从我的传播sheet 中的每个 sheet 中读取列 AV?我想遍历 sheets(A coy、B coy 等...)并读取每个列的 AVarray_merge 不会与任何数据冲突,因此如果无法通过 sheet 专门读取 sheet,那么合并解决方案也很好。

非常感谢。

电子表格没有这些方法,因为它们是在 Reader 中访问的,而不是在电子表格中; ReadFilter 只是告诉 Reader 在将文件读入电子表格对象

时仅加载列 A-V 的单元格数据
$worksheet = $spreadsheet->getActiveSheet(); // Not sure how to change between these
// Use `setActiveSheetIndex(<worksheetindex>)`
//  or `setActiveSheetIndexByName(<worksheetname>)
//  to set the selected worksheet

foreach ($worksheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
        foreach ($cellIterator as $cell) {
            $cell = $cell->getValue(); // Not sure what column this is looping through
            // The $cell->getColumn() method will tell you the column
        }
    }