Я работаю в импорте документов 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;
}
Это не идеальный процесс, но он работает