PHP:为什么我的 PHPExcel_cell 将一个空列设置为 HighestColumn?

问题描述 投票:0回答:2

我正在尝试从使用

use PHPExcel_Cell;
上传的 Excel 文件中读取数据。在我的 Excel 中,数据实际上写在列 AY(25 列),但我的系统得到最高列是 AMK。所以系统给出一个错误,因为从 ZAMK 的每一列都不包含数据。

这是我用来阅读最高栏的代码:

$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn);
echo $colNumber;

下面是结果

AMK

您可以在这里看到,Excel 文件仅包含 Y 列的数据

为什么我的 PHPEXCEL_cell 没有避开空列,而是将最后一列包含数据的列设置为最高列?

谢谢

php excel yii2 phpexcel
2个回答
2
投票

取决于你对

$highestColumn
的价值从何而来。 PHPExcel 内置了两个用于报告最高列的函数,您没有提及您使用过哪个(如果有的话)。

第一个是

getHighestColumn()
,它使用已读取文件中存储的最高列值。请注意,这适用,因为该列在加载文件中的某处被引用,不一定是因为它是包含数据的单元格,但可能在页面设置中引用,或者使用样式等。它也是一个静态值:一次读取, 它不会改变,即使你在工作表中添加额外的单元格。

第二种方法是

getHighestDataColumn()
,它实际上是遍历工作表中的每个单元格,并返回单元格所在的最高列。因为此方法在调用时执行检查,所以在性能方面成本很高,但它是准确的,并且会随着您向工作表中添加新单元格而改变。

注意(这适用于

getHighestColumn()
getHighestDataColumn()
方法)空字符串
''
或空值对于单元格来说是完全有效的值;所以一个单元格可以存在,即使它不包含任何可显示的值。


0
投票

面临类似的问题。在我的例子中,由于 Mark 提到的原因,数组中有一堆空列。但是这里有一个解决方法,您可以获得最高的非空列:

 public function getHighestNonEmptyColumn($worksheet)
    {
        $highestRow = $worksheet->getHighestDataRow();
        $highestColumn = $worksheet->getHighestDataColumn();

        $alphabet = range($highestColumn, 'A');
        $sequence = range('1', $highestRow);
        $highestNonEmptyColumns = array();

        foreach ($alphabet as $letter) {
            foreach ($sequence as $row) {
                if ($worksheet->getCell($letter . $row)->getValue() != null) {
                    $highestNonEmptyColumns[] = $letter;
                }
            }
        }

        return max($highestNonEmptyColumns);
    }

对我来说 getHighestDataColumn() 返回 Z。使用这个你可以获得非空的最高列。

很确定它不符合成本效益,但至少它有效。

© www.soinside.com 2019 - 2024. All rights reserved.