2012-06-19 19 views
5

Jestem nieco zakłopotany przez zachowanie PHPExcel z niektórymi plikami, które mam. Pliki zawierają ok. 3000 wierszy danych, ale według PHPExcel, ostatni użyty wiersz to 65535. Próbowałem i wyciąłem kilka linii z pliku i wkleiłem je do nowego pliku, bezskutecznie. Nie ma znaczenia, czy jest to format Excel5, czy Excel2007, zawsze taki sam wynik.PHPExcel - wczytuje ostatni wiersz

Wszelkie pomysły na znalezienie błędu tutaj?

KOD:

$cr=$xls->getActiveSheet()->getHighestRow(); 
    $cn=PHPExcel_Cell::columnIndexFromString($xls->getActiveSheet()->getHighestColum‌​n()); 
    for ($z=2; $z<=$cr; $z++) { 
     $class=($z%2)?"odd":"even"; 
?> 
    <tr class="<?php echo $class; ?>"> 
    <?php for ($s=0; $s<$cn; $s++) { 
     $tmp=$xls->getActiveSheet()->getCellByColumnAndRow($s,$z)->getValue();?> 
     <td><?php echo $tmp; ?></td> 
    <?php } ?> </tr> 
<?php } ?> 
+0

Czy możesz pokazać swój kod do czytania wiersza? –

+0

$ cr = $ xls-> getActiveSheet() -> getHighestRow(); $ cn = PHPExcel_Cell :: columnIndexFromString ($ xls-> getActiveSheet() -> getHighestColumn()); dla ($ z = 2; $ z <= $ cr; $ z ++) { $ class = ($ z% 2)? "Odd": "even"; ?> getActiveSheet() -> getCellByColumnAndRow ($ s, $ z) -> getValue(); ?> user1465889

+0

Możesz edytować swoją odpowiedź i pisać kod. Zobacz: http://stackoverflow.com/editing-help –

Odpowiedz

-1

To nie jest błąd. "Pusty" arkusz kalkulacyjny nadal zawiera wiele pustych komórek. Excel ma zwykle 65536 linii i 256 kolorów.

+2

Ale wtedy wszystkie pliki powinny pokazywać to zachowanie - mam kilka innych plików, które kończą się tam, gdzie spodziewam się, że się kończą - z ostatnim wierszem, w którym wprowadzono dane. – user1465889

+0

Hmmm ... spróbuj eksportować do CVS, a następnie z powrotem do formatu Excela. –

1
$objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 

lub

$objPHPExcel->setActiveSheetIndex(0)->calculateWorksheetDimension(); 

który zwraca zakres jako ciąg jak A1: AC2048

choć końcowe puste wiersze i kolumny są zawarte w nich.

lub możesz użyć iteratorów do przechodzenia między istniejącymi wierszami i kolumnami, aby uzyskać każdą komórkę z zakresu używanego arkusza. Zobacz /Tests/28iterator.php w dystrybucji produkcyjnej na przykład. Iteratory można ustawić tak, aby ignorowały puste miejsca.

Źródło:

How to find out how many rows and columns to read from an Excel file with PHPExcel?

+0

Używam getHighestRow(), a otrzymuję 65535 dla niektórych plików i poprawny ostatni wiersz dla innych, bez rozróżnialnego wzorca. – user1465889

5

Wystarczy pusta komórka, a ostatnia kolumna/wiersz może być dużo większa niż można się spodziewać. Nawet układ wydruku lub style mogą fałszować zapisane najwyższe wartości. Otwórz plik w MS Excel i naciśnij Ctrl-End, aby przejść do ostatniej komórki rozpoznanej przez program Excel.

Oprócz getHighestRow() i getHighestColum() istnieją również (wolniej) metody getHighestDataRow() i getHighestDataColumn(), które identyfikują najwyższy wiersz i kolumnę, które faktycznie zawierają dane komórki.

+0

Dzięki za podpowiedź; ładowanie i savin w OpenOffice też pomogło. – user1465889

0

Mark Baker ma rację. Więc naprawiłem problem na mojej stronie o następujących krokach:

  1. zrobić ctrl + End od pierwszej pustej komórce po ostatnim rzędzie, które mają dane. np. więc jeśli mam ostatni wiersz danych to od A3 do D3. Zrobię ctrl_end w komórce A4

    • Ten zaprezentuje wam liczbę pustych wierszy
  2. prawym przyciskiem myszy na wybrane wiersze (wiersze wybrane wykonując pierwszy krok) i wybierz „Usuń”.

  3. otworzy się okno podręczne. wybierz "Cały wiersz" i kliknij przycisk OK.

Tak więc niezależnie od tego, jaki kod będzie trzeba załadować dane programu Excel, będzie on czytał tylko te wiersze, które mają dane.