我从事Excel文档的导入
$file = '/path/to/file.xlsx';
$reader = new Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($file);
$dataset = $spreadsheet->getActiveSheet()->toArray(); // Here I am expecting 15 rows but instead I am getting 195. This is one case
当我检查要读取的行数时,我得到的数字要大于有数据的行。
例如
$rows = $spreadsheet->getActiveSheet()->getHighestDataRow(); // In this case there area 12 rows but the method return 822
这些文档的行数是可变的,我必须在每个文档中获取每行每个单元格的值。为了知道必要的迭代次数,我使用了getHighestDataRow()
方法,但是它返回的行数要多得多,例如,我有15行的文档,而该方法告诉我有800多行,因此在其他文档中重复了该行为。我是图书馆的新手,尽管文献记录非常丰富,但是我还没有找到类似案例的指南。
如何获取包含实际数据的行数?
感谢您的帮助
更新
目前,我的解决方案是过滤元素中没有值的行。例如,使用方法$dataset = $spreadsheet->getActiveSheet()->toArray();
$dataset
结果看起来像这样
$dataset = [
[null, null, null, null],
[null, null, null, null],
[null, null, null, null],
[null, null, null, null],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[null, null, null, null],
[null, null, null, null],
[null, null, null, null],
];
我希望如此
$dataset = [
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
];
因此,我正在做一个小的过滤器,以便对$dataset
项进行迭代,以便仅对具有数据的$dataset
个项目进行迭代
function onlyData($dataset) {
$result = [];
foreach ($dataset as $data) {
if ($data[0] !== null) {
$result[] = $data;
}
}
return $result;
}
这不是一个理想的过程,但是它正在起作用