2013-04-09 18 views
6

Có mã này, sử dụng PHPExcelgetHighestColumn trong xlsx không làm việc

public function getHighestColumn() 
    { 
     return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); 
    } 

    public function getHighestRow() 
    { 
     return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 
    } 

Tôi có file excel cùng lưu trong .xls và .xlsx Nó có 10 cột (Từ B đến K), và 10 dòng

Khi tôi sử dụng getHighestColumn, bằng .xls Tôi nhận được 'K' (đúng), nhưng in .xlsx Tôi nhận được AMK (cột cuối cùng trong tất cả bảng tính excel) Giới thiệu về hàng, sử dụng .xls I ' m nhận được 10, nhưng in .xlsx Tôi nhận được 1024. Tôi chắc chắn rằng, ngoại trừ bảng, phần còn lại của trang tính trống.

Bất kỳ ý tưởng nào khiến tôi nhận được kết quả khác?

Sau đây là các độc giả Tôi đang sử dụng

public function openReader($filePath) 
    { 
     //aca determinamos cual tipo es para saber que reader es 
    $reader_5 = new PHPExcel_Reader_Excel5(); 
    $reader_07 = new PHPExcel_Reader_Excel2007(); 

    $inputFileType = $this->canRead(new PHPExcel_Reader_Excel5(), $filePath, self::EXCEL5); 

    if($inputFileType === '') 
     $inputFileType = $this->canRead(new PHPExcel_Reader_Excel2007(), $filePath, self::EXCEL2007); 
    else 
    { 
     throw new Exception("No se puede procesar el archivo; el formato no es correcto"); 
    } 
    return PHPExcel_IOFactory::createReader($inputFileType); 
    } 


private function canRead($reader, $path, $readerType) 
    { 
    return $reader->canRead($path) ? $readerType: ''; 
    } 

public function persist($fileName) 
    { 
     $filePath = sfConfig::get('sf_upload_dir').'\\'.$fileName; 

     $this->objReader = $this->openReader($filePath); 
     //Set only first Sheet 
     $this->setOnlyFirstSheet(); 

     $this->createObjPHPExcel($filePath); 

     echo $this->getHighestColumn(); 
     echo $this->getHighestRow(); 
    } 

Tôi đã kiểm tra với var_dump và trong từng trường hợp Tôi đang sử dụng đầu đọc đúng.

php 5.3.5, 1.7.8 PHPExcel, Symfony 1,4

+1

Bạn không nên nhận được 'B' cho cột cao nhất trong file xls nếu bạn có dữ liệu trong cột 'K' .... nhưng mở tệp xlsx trong MS EXcel và làm Ctrl-End để xem những gì nó nghĩ rằng ô cuối cùng là –

+2

Ngoài ra, vì hàng và cột được tính bằng getHighestColumn() và getHighestRow() nếu chúng chứa _anything_ (bao gồm thông tin phong cách) thay vì chỉ đơn giản là có nội dung, hãy xem các phương thức getHighestDataColumn() và getHighestDataRow() –

+0

Ý tôi là, nhận 'K', là lỗi đánh máy. Kiểm tra các phương thức đó –

Trả lời

16

Hàng và cột được tính bởi getHighestColumn()getHighestRow() nếu chúng chứa bất cứ điều gì (bao gồm thông tin phong cách) chứ không phải chỉ đơn giản có nội dung. Các giá trị này cũng được tính khi bảng tính được tải, vì vậy có thể không chính xác nếu sau đó bạn thêm hàng hoặc cột mới vào trang tính.

Thay vào đó, hãy sử dụng phương thức getHighestDataColumn()getHighestDataRow() để trả về hàng và cột cao nhất thực sự chứa giá trị dữ liệu trong ô. Trong khi kém hiệu quả, họ thực sự tính toán tham chiếu ô cao nhất khi được gọi, mà là chậm hơn, nhưng luôn luôn chính xác

1
$highestColumn = $sheet->getHighestColumn();  
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn); 
+1

mã được cung cấp có thể giúp, nhưng để làm cho nó một câu trả lời tốt, bạn cũng nên mô tả/giải thích tại sao/làm thế nào chính xác mã của bạn giải quyết vấn đề. – ZygD

+0

Tôi đã sử dụng mã này trong một trong các dự án – gopi

Các vấn đề liên quan