PHPExcel如何从单元格获取列索引

22

PHPExcel $cell->getColumn()返回'A','B','C'等等……

那么从单元格中获取整数(0,1,2,...)的最佳方法是什么。

该功能不存在。

$colIndex = $cell->getColumnIndex();

那么如果不将chr转换为ascii,有什么替代方案呢?


请注意,对于大于26的列,getColumn()可能会返回“AA”(等等)... - AlexV
3个回答

47
$colIndex = PHPExcel_Cell::columnIndexFromString($cell->getColumn());

6
好的,运行良好。我注意到列A返回的值为1,但是$cell = "worksheet->getCellByColumnAndRow($col, $row);会在列A上使用0。 自己琢磨吧。 - john Griffiths
2
是的,有点古怪...这是我接手开发PHPExcel时继承下来的东西,但改变它会破坏很多人的向后兼容性。 - Mark Baker
5
对于那些需要反向操作的人,可以使用PHPExcel_Cell :: stringFromColumnIndex函数。 - Reactgular
一个很棒的答案可以在这里找到(https://dev59.com/dW455IYBdhLWcg3wD_wB),对我帮助很大。 - t1gor
@MarkBaker - 这个问题,答案和评论早就存在了很长时间,但如果还没有解决方案呢?这不是一个大问题,但有点烦人。您可以考虑实现从哪个索引开始列以及应该使用什么返回值(例如$ PHPExcel->setStartColumnIndex(0); $ PHPExcel->setReturnValue(string)或$ PHPExcel->setReturnValue(int)等等)。只是一个提示!否则,这个库真的很棒 :-) - bestprogrammerintheworld
1
如果你想要零索引,那么从返回的值中减去1就可以了,但是改变库的行为以在这种情况下返回零永远不是一个好主意,因为用户已经编写了适用于1索引返回的代码,他们会发现之前工作正常的代码突然失效。 - Mark Baker

5
您可以在迭代时获取列索引。
$xls = PHPExcel_IOFactory::load($fn);
$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();

foreach($sheet->getRowIterator() as $row)
{
    foreach($row->getCellIterator() as $key => $cell)
    {
        echo $key; // 0, 1, 2...
        echo $cell->getCalculatedValue(); // Value here
    }
}

我该如何仅获取每行第二个单元格的值? - Lachezar Raychev

2
If you want to get decrement cell address using this function, you have to use another function with this function as follows.

<?php
echo columnLetter("AB");

function columnLetter($c){


$letter="";
    $c = intval(columnNumber($c));
    if ($c<=0) return '';

    while($c != 0){
       $p = ($c - 1) % 26;
       $c = intval(($c - $p) / 26);
       $letter = chr(65 + $p) . $letter;
    }

    return $letter;

}

function columnNumber($col){

    $col = str_pad($col,2,'0',STR_PAD_LEFT);
    $i = ($col{0} == '0') ? 0 : (ord($col{0}) - 64) * 26;
    $i += ord($col{1}) - 64;

    return $i-1;

}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接