9

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

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

为了加载我的文件并将其内容转换为数组,我在数组中获取了 Excel 文件的所有列和行,即使其中没​​有任何数据也是如此。库 PHPExcel 中是否有一种方法或某些东西可以告诉它忽略我的 Excel 工作表中不包含任何数据的单元格?(而不是在 my 中有一堆空的关联数组$data

4

3 回答 3

15

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

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

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

于 2013-02-20T14:06:09.810 回答
10

我的情况有这个解决方案

$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);

将返回一个只有填充行的数组..希望有所帮助

于 2014-04-29T10:43:28.420 回答
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() 回调以删除它们。

于 2012-09-05T20:37:11.380 回答