忽略空单元格PHPExcel

时间:2012-09-05 16:05:53

标签: php phpexcel

我正在使用库PHPExcel来读取Excel文件中的数据。我遇到的问题是,当我使用类似的东西时:

$obj = PHPExcel_IOFactory::load($file);
$data = $obj->getActiveSheet()->toArray(null,true,true,true);

要加载我的文件并将其内容转换为数组,我会在我的数组中获取Excel文件的所有列和行,即使是那些没有任何数据的列。 PHPExcel库中是否有方法或其他东西告诉它忽略Excel表格中不包含任何数据的单元格? (而不是在我的$data中有一堆空的关联数组)

3 个答案:

答案 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()回调以删除它们。