2010-08-11 39 views
21

PHPExcel $ cell-> getColumn() trả về 'A', 'B', 'C', ...PHPExcel cách lấy chỉ mục cột từ ô

là cách tốt nhất để lấy số nguyên (0 , 1, 2, ...) từ ô.

Chức năng này không tồn tại.

$colIndex = $cell->getColumnIndex(); 

Vì vậy, lựa chọn thay thế khi chuyển đổi chr thành ascii là gì?

+0

Hãy ghi nhớ rằng getColumn() có thể trở lại 'AA' (và vân vân) cho các cột> 26 ... – AlexV

Trả lời

44
$colIndex = PHPExcel_Cell::columnIndexFromString($cell->getColumn()); 
+6

OK hoạt động tốt, tôi nhận thấy rằng giá trị trả về là 1 cho cột A nhưng $ cell = "worksheet-> getCellByColumnAndRow ($ col, $ row); sử dụng 0 cho cột A go hình –

+2

Yup, kỳ quặc ... một cái gì đó tôi thừa kế khi tôi tiếp quản sự phát triển của PHPExcel, nhưng thay đổi nó sẽ phá vỡ khả năng tương thích cho nhiều người –

+3

Ngoài ra còn có PHPExcel_Cell :: stringFromColumnIndex cho những người cần phải đi theo một cách khác. – cgTag

5

Bạn có thể nhận chỉ mục cột trong khi lặp lại.

$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 
    } 
} 
+0

Và cách di chỉ nhận giá trị cho ô thứ hai của mỗi hàng? –

1
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; 

} 
?> 
Các vấn đề liên quan