如何解决如何使用PHP中的IReadFilter读取PhpOffice \ PhpSpreadsheet中的单元格?
我正在尝试从多个工作表的电子表格中读取两列。例如:
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加载电子表格,以了解如何执行此操作。
将文档中的所有信息汇总在一起后,我想到了:
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
实例没有此方法,而且我一生无法找到使用方法在文档中。
现在如何从电子表格的每个工作表中读取列A
和V
?我想遍历工作表(A y,B y等),并分别阅读A
和V
列。 array_merge
不会与任何数据发生冲突,因此,如果无法逐张地专门读取数据,那么合并的解决方案也将非常有用。
非常感谢。
解决方法
电子表格没有这些方法,因为它们是在阅读器而不是电子表格中访问的; ReadFilter只是告诉阅读器在将文件读入Spreadsheet对象时仅加载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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。