我正在尝试从使用
use PHPExcel_Cell;
上传的 Excel 文件中读取数据。在我的 Excel 中,数据实际上写在列 A 到 Y(25 列),但我的系统得到最高列是 AMK。所以系统给出一个错误,因为从 Z 到 AMK 的每一列都不包含数据。
这是我用来阅读最高栏的代码:
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn);
echo $colNumber;
下面是结果
AMK
谢谢
取决于你对
$highestColumn
的价值从何而来。 PHPExcel 内置了两个用于报告最高列的函数,您没有提及您使用过哪个(如果有的话)。
第一个是
getHighestColumn()
,它使用已读取文件中存储的最高列值。请注意,这适用,因为该列在加载文件中的某处被引用,不一定是因为它是包含数据的单元格,但可能在页面设置中引用,或者使用样式等。它也是一个静态值:一次读取, 它不会改变,即使你在工作表中添加额外的单元格。
第二种方法是
getHighestDataColumn()
,它实际上是遍历工作表中的每个单元格,并返回单元格所在的最高列。因为此方法在调用时执行检查,所以在性能方面成本很高,但它是准确的,并且会随着您向工作表中添加新单元格而改变。
注意(这适用于
getHighestColumn()
和 getHighestDataColumn()
方法)空字符串 ''
或空值对于单元格来说是完全有效的值;所以一个单元格可以存在,即使它不包含任何可显示的值。
面临类似的问题。在我的例子中,由于 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。使用这个你可以获得非空的最高列。
很确定它不符合成本效益,但至少它有效。