Intereting Posts
Как решить ошибку «не удается передать параметр по ссылке» в PHP? Как использовать DATE_ADD в критериях Yii $? Как отклонить платеж через IPN PayPal? Получение «json parser error» после отправки данных формы на сервер Перенос переменных в PHP Может ли клиент просмотреть исходный код PHP на стороне сервера? gform_after_submission Сообщение для стороннего API Изменение следующего раскрывающегося списка с предыдущим выпадающим событием onchange Regex соответствует имени класса CSS Добавить новую строку в файл excel с использованием библиотеки phpExcel Mysql + php со специальными символами типа «(Апостроф)» и «(котировочная метка) Прочитайте URL-адрес CSV и импортируйте выбранные данные в mysql с помощью PHP Sylius: Как вводить (запрашивать) аргументы в пользовательском ProductRepository? Мне нужен совет, разрабатывающий чувствительную систему передачи / хранения / шифрования данных PHP XML для Карт Google InfoWindow

Игнорировать пустые ячейки PHPExcel

Я использую библиотеку 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 () может быть изменен для их удаления.