Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Import XLS do PHP brak znaku "-"
Forum PHP.pl > Forum > PHP
adamzuk
Witam, mam problem z importem pliku xls do php.
Chciałbym wyświetlić zawartość pliku Excela, ma on dwie kolumny. W drugiej kolumnie czasami występują wartości ujemne.
Korzystam z klasy new Spreadsheet_Excel_Reader().
niestety przy wyświetlaniu po imporcie nie pokazują się minus w wartościach ujemnych.
Skrypt:
  1. require_once 'reader.php';
  2. $xls = new Spreadsheet_Excel_Reader();
  3.  
  4. $xls->setOutputEncoding('UTF-8');
  5. $xls->read("test1.xls");
  6.  
  7.  
  8. for ($i = 1; $i <= $xls->sheets[0]['numRows']; $i++) {
  9.  
  10.  
  11. $kole=$xls->sheets[0]['cells'][$i][2] ;
  12. echo"$kole<br>";
  13.  
  14. $kwotaa=$xls->sheets[0]['cells'][$i][1] ;
  15. echo"$kwotaa<br>";
  16.  
  17.  
  18.  
  19. }


Czy ktoś może mi pomoćquestionmark.gif
Sephirus
Oprócz klucza "cells" w $xml->sheets[0] znajdziesz też klucz "cellsInfo" a w nim klucz "raw", pod którą przechowywana jest surowa wartość komórki - zobacz czy w tym elemencie też nie ma "-".
adamzuk
Czyli mam spawdzić wpisując tak:

  1. require_once 'reader.php';
  2. $xls = new Spreadsheet_Excel_Reader();
  3.  
  4. $xls->setOutputEncoding('UTF-8');
  5. $xls->read("test1.xls");
  6.  
  7.  
  8. for ($i = 1; $i <= $xls->sheets[0]['numRows']; $i++) {
  9.  
  10.  
  11. $kole=$xls->sheets[0]['cells'][$i][2] ;
  12. echo"$kole<br>";
  13.  
  14.  
  15. $kolei=$xls->sheets[0]['cellsInfo']['raw'][$i][2] ;
  16. echo"$kolei<br>";
  17.  
  18.  
  19. $kwotaa=$xls->sheets[0]['cells'][$i][1] ;
  20. echo"$kwotaa<br>";
  21.  
  22.  
  23.  



jeśli powyższe jest prawidłowe to nie pokazuje mi się nic pod zmienna $kolei sad.gif
Sephirus
Nie nie - ja nie pamiętam dokładnie układu tego co jest w "sheets[0]" - kiedyś na tym robiłem i pamiętam o tym cellsInfo - po prostu użyj print_r/var_dump na całym tym sheet i zobacz co jest gdzie wink.gif
adamzuk
tak powinno być: $koler=$xls->sheets[0]['cellsInfo'][$i][2]['raw'];

ale pokazuje wartość bez minusa sad.gif

Czy ktoś może ma jeszcze jakiś pomysł?
Sephirus
Jeśli tam też jest bez minusa to obawiam się, że się ta klasa pogubiła :| Coś z tym XLSem jest nie tak albo ona nie potrafi go przetworzyć dobrze. Proponuje poszukać innej klasy do obsługi tego (bo rozumiem, że XLSa zmieniać nie możesz)...
adamzuk
a znasz jakieś inne klasy?
hm... zamienić na?

to działa codzienny automat który pobiera excela z maila i porównuje go z wartoścami z bazy.
niestety ktoś kto wysyła mi excela nie ma możliwości zapisu ani w csv, ani w xml.
Sephirus
Szczerze mówiąc nie znam, zatrzymałem się na tej właśnie bo spełniała moje oczekiwania - musisz szukać u wujka Google sad.gif
adamzuk
Dodam jeszcze, że czasami minus się pojawia a czasami nie....?

nikt nie może mi pomóc?

czy ktoś zna inne klasy do obsługi excela?
jackraymund
Ustaw
$xls->setOutputEncoding('mb');
i podeślij ten xls.
adamzuk
ustawiłem ale nic nie pomogło:)

link do ściagnięcia pliku
https://www.dropbox.com/s/ukcsmk7tqx2z2z1/test1.xls?dl=0
jackraymund
Zrobiłem kod testowy i nadal wszystko śmiga.
  1. $loops = 100000;
  2. $rounds = 0;
  3. while($loops > $rounds){
  4. $data = new Spreadsheet_Excel_Reader();
  5. $data->setOutputEncoding('mb');
  6. $data->read('test.xls');
  7. for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
  8. $value = $data->sheets[0]['cells'][$i][1];
  9. if(!empty($value)){
  10. $int = intval($data->sheets[0]['cells'][$i][1]);
  11. if($int > 0){
  12. echo "\"".$int."\",";
  13. echo "<br>";
  14. }
  15. }
  16. }
  17. $rounds++;
  18. }

Przy http://screenshooter.net/100008827/kxihkaa
Ściągnij klasę stąd
http://sourceforge.net/projects/phpexcelre...xcel_Reader/2i/
adamzuk
pobrałem klasę z Twojego linku
zrobiłem plik: https://www.dropbox.com/s/ysjovglw0v88lci/test2.xls?dl=0
a skrypt taki:

  1. <?php
  2. require_once 'reader.php';
  3. $loops = 56;
  4. $rounds = 0;
  5. while($loops > $rounds){
  6. $data = new Spreadsheet_Excel_Reader();
  7. $data->setOutputEncoding('mb');
  8. $data->read('test2.xls');
  9. for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
  10. $value = $data->sheets[0]['cells'][$i][1];
  11. if(!empty($value)){
  12. $int = intval($data->sheets[0]['cells'][$i][1]);
  13. if($int > 0){
  14. echo "\"".$int."\",";
  15. echo "<br>";
  16. }
  17. }
  18. }
  19. $rounds++;
  20. }
  21.  
  22. ?>


wynik:

"2",
"12",
"2",
"1313",
"2",
"12",
"2",
"1313",
"2",
"12",
"2",
"1313",
"2",
"12",
"2",
"1313",
"2",
"12",
"2",


sad.gifsad.gif
jackraymund
u mnie dziala. co masz za serwer i jaka wersja php?
adamzuk
krasnal, php 5
Turson
5 ile? 5.0 ?
adamzuk
5.0.2
jackraymund
Na 100% nie jestem pewien czy to wina serwera, ale mógłbyś chociaż spróbować. 5.0 to trochę stara wersja
Sam używam xampp, od hoho i nigdy problemów z nim nie miałem.
Najnowsza wersja php, łatwa obsługa itd.
https://www.apachefriends.org/pl/index.html
Zainstaluj, wylacz krasnala i w xampp control daj Start przy apache. I w x:\xampp\htdocs masz folder przypisany do localhost'a.
adamzuk
ok, popróbuje, tylko z tego co pamietam w xamppie miałem jakieś problemu z bazami mssql, a na nich dużo pracuj..

sprawdzę i dam znać.
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.