Я использую библиотеку PHPExcel для чтения данных в файле Excel. Проблема, с которой я сталкиваюсь, заключается в том, что когда я использую что-то вроде:
$obj = PHPExcel_IOFactory::load($file); $data = $obj->getActiveSheet()->toArray(null,true,true,true);
Чтобы загрузить мой файл и преобразовать его содержимое в массив, я получаю все столбцы и строки моего файла Excel в моем массиве, даже те, у кого нет данных. Есть ли способ или что-то в библиотеке PHPExcel, чтобы сказать ему игнорировать ячейки в моем листе Excel, которые не содержат никаких данных? (Вместо того, чтобы иметь пустые ассоциативные массивы в моих $data
)
Если ваша проблема заключается в получении пустых столбцов, которые идут за реальными данными, и вы хотели бы избежать их, вы могли бы сделать что-то вроде этого:
$maxCell = $sheet->getHighestRowAndColumn(); $data = $sheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
Это вернет массив, представляющий только область, содержащую реальные данные.
У меня есть это решение для моего случая
$maxCell = $objWorksheet->getHighestRowAndColumn(); $data = $objWorksheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
верните все строки со всей пустой строкой как:
[1] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => )
Чтобы удалить эти пустые строки
$data = array_map('array_filter', $data);
вернется
[1] => Массив ()
И это финальное решение:
$maxCell = $objWorksheet->getHighestRowAndColumn(); $data = $objWorksheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']); $data = array_map('array_filter', $data); $data = array_filter($data);
вернет массив только с заполненными строками .. надеюсь, что помощь
Нет, нет. Метод toArray () возвращает первый аргумент (NULL) для представления пустой ячейки. Затем вы можете применить стандартные функции массива PHP, такие как array_filter (), чтобы устранить пустые ячейки.
foreach($data as $key => &$row) { $row = array_filter($row, function($cell) { return !is_null($cell); } ); if (count($row) == 0) { unset($data[$key]); } } unset ($row);
неforeach($data as $key => &$row) { $row = array_filter($row, function($cell) { return !is_null($cell); } ); if (count($row) == 0) { unset($data[$key]); } } unset ($row);
Это устранит каждую ячейку, которая является значением NULL (пустое), и каждая строка, содержащая только пустые ячейки. Он сохранит ключи массива, поэтому ваши ключи массива по-прежнему будут давать вам ссылку на ячейку.
Обратите внимание, что ячейка, содержащая пустую строку, не является нулевой ячейкой, поэтому они будут сохранены, хотя обратный вызов array_filter () может быть изменен для их удаления.