我正在使用库PHPExcel来读取Excel文件中的数据。我遇到的问题是,当我使用类似的东西时:
$obj = PHPExcel_IOFactory::load($file);
$data = $obj->getActiveSheet()->toArray(null,true,true,true);
要加载我的文件并将其内容转换为数组,我会在我的数组中获取Excel文件的所有列和行,即使是那些没有任何数据的列。 PHPExcel库中是否有方法或其他东西告诉它忽略Excel表格中不包含任何数据的单元格? (而不是在我的$data
中有一堆空的关联数组)
答案 0 :(得分:14)
如果您的问题是获取追踪真实数据的空列,并且您希望避免这些,您可以执行以下操作:
$maxCell = $sheet->getHighestRowAndColumn();
$data = $sheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
这将返回仅表示包含实际数据的区域的数组。
答案 1 :(得分:9)
我的解决方案是
$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);
将返回一个只填充行的数组..希望有帮助
答案 2 :(得分:3)
不,没有。 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);
这将消除每个NULL(空)值的单元格,以及除空单元格之外的任何一行。它将保留数组键,因此您的数组键仍将为您提供单元格引用。
请注意,包含空字符串的单元格不是空单元格,因此这些单元格将被保留,尽管可以修改array_filter()回调以删除它们。