Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Spreadsheet_Excel_Reader czyli czytanie z pliku xls problem z funkcją read
Forum PHP.pl > Forum > PHP
alfam17
Mam za zadanie wczytać plik excela z danymi do mysql. Postanowiłem dokonać tego za pomocą skryptu php. Wyszukałem w sieci klasę Spreadsheet_Excel_Reader niestety jak zwykle nie obeszło się bez kłopotów.
Skrypt niestety nie chce działać. Wykrzacza się na funkcji read ponieważ po zakomentowaniu funkcji read skrypt się wykonuje dalej. Niewiem co jest grane ponieważ przykład nie jest jakoś zbyt skomplikowany. Uruchamiam na krasnalu jak i na serwerze cba.pl i dalej to samo. W przeglądarce pojawia się informacja:
CODE
Fatal error: Maximum execution time of 120 seconds exceeded in c:\usr\krasnal\www\katalog\oleread.inc on line 172


zwiększyłem limit czasu funkcją set_time_limit(300); niestety nie dało to żadnych rezultatów zresztą plik testowy xls ma około 30kB więc o czym mowa.
Już sam niewiem co może być nie tak

oto kod
CODE

<?

//include("host.php");
require_once 'reader.php';
$xls = new Spreadsheet_Excel_Reader();
$xls->setOutputEncoding('cp1250');
set_time_limit(300);
$plik='test.xls';
$xls->read($plik);



echo "witaj";
for ($i = 1; $i <= $xls->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $xls->sheets[0]['numCols']; $j++) {
echo $xls->sheets[0]['cells'][$i][$j] . ' ';
}
echo '<br>';
}
?>



proszę o jakieś sugestie
delfinium
1. Utwórz jakiś inny plik XLS z powiedzmy wypełnioną jedną komórką i zobacz czy też się wiesza, jak tak to problem będzie w pliku testowym

2. Ostatni update klasy był w czerwcu 2007 i może XLS którego używasz jest zapisany w nowszym formacie? Jak nie ma tam cudów wianków to spróbuj go zapisać w formacie Excel95 czy 97, może to pomoże.

3. Pozostaje jedynie debug metody read, długa nie jest ale dużo skoków do innych metod i może być ciężko.

Już wiem gdzie leży problem, tam jest taka pętla

  1. <?php
  2. while( $block != -2 )
  3. {
  4. ...
  5. }
  6. ?>


i widocznie $block powinien kiedyś osiągnąć -2 a u Ciebie tak nie jest i to powoduje niekończącą się pętlę.
alfam17
zapisanie w formacie excel 97 pomogło. Najciekawsze jest to jak się fajnie skrypcik męczy przerabiając 46tyś wierszy winksmiley.jpgsmile.gif
delfinium
W środku tej pętli czytana jest zawartość pliku tak długo aż znajdzie wartość -2 i wtedy kończy działanie. W przypadku Twojego pliku nie znajduje jej i ciągle szuka powodując przekroczenie max_execution_time. Więc problem leży i tu i tu, bo w pętli nie przewidziano że może się zdarzyć sytuacja że wartości -2 nie będzie (a widocznie powinna być wg standardu) a Twoim pliku jej nie ma.
alfam17
Pojawił się jeszcze jeden problem mianowicie dziwnie zapisuje dane do bazy danych

w excelu w komórkach w których nie ma danych jest znak - natomiast w bazie danych w tym miejscu skrypt zapisuje liczbę 253 jak zrobić aby w bazie też zapisywał - albo wogule nie wypełniał tej wartości

kodowanie w skrypcie mam ustawione:
setOutputEncoding('ISO-8859-2');
delfinium
Przy odczycie porównaj zawartość komórki. Nie wiem jak to masz zorganizowane podam przykład w pseudokodzie

  1. <?php
  2. for ( i .. )
  3. {
  4.  $cell = $excel->cell( i, j );
  5.  if ( $cell == 253 ) $cell = '';
  6.  mysql_query( .... );
  7. }
  8. ?>
alfam17
też nad tym myślałem gorzej gdy właśnie któraś z komórek będzie miała taką wartość winksmiley.jpg to wtedy wpisze '' zresztą niewiadomo jak to wszystko jest kodowane
Cutiz
Witam,

męczę się dziś pół dnia nad problemem odczytu z pliku XLS. Mam podobny problem.
Ustawiłem:
  1. $data->setOutputEncoding('ISO-8859-2');

lub na UTF-8, mieszałem też z
  1. $data->setUTFEncoder('incov')


później dane wrzucam do pliku o nazwie 'abc.csv'. Pracuję na Ubuntu Serwer.
I tutaj pojawia się problem taki, że wartości komórki za polskimi znakami są urywane, to znaczy, że mając np. słowo "Pamięci" w wejściowym XLS, na wyjściu mam "Pami".

Nie wiem gdzie leży problem. Proszę o pomoc.

Pozdrawiam,
Mariusz

problem był z rozszerzeniem pliku. Nie można wrzucać do *.csv.
Utworzyłem abc.txt i wszystko działa poprawnie!

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.