getHighestDataRow返回更多行要读取

时间:2018-12-14 04:44:04

标签: php phpspreadsheet

我从事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;
}

这不是一个理想的过程,但是它正在起作用

0 个答案:

没有答案