getHighestDataRow возвращает большее количество строк для чтения - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю в импорте документов 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;
}

Это не идеальный процесс, но он работает

...