如何使用 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\PHPSpreadsheet
和 documentation 加载 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 中读取列 A
和 V
?我想遍历 sheets(A coy、B coy 等...)并读取每个列的 A
和 V
。 array_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
}
}
我正在尝试从跨多个 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\PHPSpreadsheet
和 documentation 加载 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 中读取列 A
和 V
?我想遍历 sheets(A coy、B coy 等...)并读取每个列的 A
和 V
。 array_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
}
}