Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Spreadsheet_Excel_Reader czyli czytanie z pliku xls problem z funkcją read
alfam17
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował alfam17 3.09.2008, 16:38:32
Go to the top of the page
+Quote Post
delfinium
post
Post #2





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował delfinium 3.09.2008, 19:00:10
Go to the top of the page
+Quote Post
alfam17
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


zapisanie w formacie excel 97 pomogło. Najciekawsze jest to jak się fajnie skrypcik męczy przerabiając 46tyś wierszy winksmiley.jpgsmile.gif

Ten post edytował alfam17 3.09.2008, 19:44:21
Go to the top of the page
+Quote Post
delfinium
post
Post #4





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
alfam17
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


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');
Go to the top of the page
+Quote Post
delfinium
post
Post #6





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
alfam17
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Cutiz
post
Post #8





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


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!

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:08