忽略空单元格PHPExcel

use*_*368 7 php phpexcel

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

$obj = PHPExcel_IOFactory::load($file);
$data = $obj->getActiveSheet()->toArray(null,true,true,true);
Run Code Online (Sandbox Code Playgroud)

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

TiG*_*iGR 15

如果您的问题在于获取追踪真实数据的空列,并且您希望避免这些,则可以执行以下操作:

$maxCell = $sheet->getHighestRowAndColumn();
$data = $sheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
Run Code Online (Sandbox Code Playgroud)

这将返回仅表示包含实际数据的区域的数组.


HMa*_*gdy 9

I have this solution for my case

$maxCell = $objWorksheet->getHighestRowAndColumn();
$data = $objWorksheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
Run Code Online (Sandbox Code Playgroud)

return all rows with all empty string as:

[1] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => 
            [8] => 
            [9] => 
            [10] => 
            [11] => 
            [12] => 
            [13] => 
        )
Run Code Online (Sandbox Code Playgroud)

To remove these empty rows

$data = array_map('array_filter', $data);
Run Code Online (Sandbox Code Playgroud)

will return

[1] => Array ( )

And this is the finale solution:

        $maxCell = $objWorksheet->getHighestRowAndColumn();
        $data = $objWorksheet->rangeToArray('A1:' . $maxCell['column'] . $maxCell['row']);
        $data = array_map('array_filter', $data);
        $data = array_filter($data);
Run Code Online (Sandbox Code Playgroud)

will return an array with only filled rows .. hope that help


Mar*_*ker 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);
Run Code Online (Sandbox Code Playgroud)

这将消除每个 NULL(空)值的单元格,以及只包含空单元格的每一行。它将保留数组键,因此您的数组键仍将为您提供单元格引用。

请注意,包含空字符串的单元格不是空单元格,因此它们将被保留,尽管也可以修改 array_filter() 回调以删除它们。