Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parser do csv dla exel, csv exel
Gothicbezimienny
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


Witam, piszę właśnie funkcje do zapisu danych w pliku .csv (ponieważ chce otwierać w excelu) z bazy danych. Niestety w aktualnej wersji nie działa mi sam zapis do pliku za pomocą header(), selekt i samo wyświetlenie danych jest okej, lecz nie generuje mi pliku *.csv. Może mi ktoś wskazać co robię źle i jak powinno się to robićza pomocą header()?(IMG:style_emoticons/default/smile.gif)
  1. function AkcjaParsuj(){
  2.  
  3.  
  4.  
  5. $Sort = $this->GenerujSortowanie();
  6.  
  7.  
  8.  
  9.  
  10. $data = '';
  11. $header = 'faktury';
  12. $error = "Błąd z zapytaniem";
  13.  
  14.  
  15.  
  16. $querys = "SELECT * from tabela" // to jest przykładowy selekt na pewno działa
  17.  
  18.  
  19.  
  20.  
  21.  
  22. var_dump($querys);
  23.  
  24.  
  25.  
  26.  
  27. if($this->Baza->Query($querys)){
  28.  
  29.  
  30.  
  31.  
  32. //$fp = fopen('faktury.csv', 'w');
  33.  
  34.  
  35.  
  36. while( $r = $this->Baza->GetRow($querys))
  37. {
  38.  
  39. $line = '';
  40.  
  41. foreach( $r as $value ){
  42.  
  43. if ( ( !isset( $value ) ) || ( $value == "" ) ){
  44.  
  45. $value = "\t";
  46.  
  47. }else{
  48.  
  49. $value = str_replace( '"' , '""' , $value );
  50. $value = '"' . $value . '"' . "\t";
  51. }
  52.  
  53. $line .= $value;
  54. }
  55.  
  56. $data .= trim( $line ) . "\n";
  57. }
  58.  
  59. $data = str_replace( "\r" , "" , $data );
  60.  
  61. if ( $data == "" ){
  62.  
  63. $data = "\nNo Record(s) Found!\n";
  64.  
  65. }
  66.  
  67.  
  68. header("Content-type: application/octet-stream");
  69. header("Content-Disposition: attachment; filename='faktury.csv'");
  70. header("Pragma: no-cache");
  71. header("Expires: 0");
  72. print "$header\n$data";
  73.  
  74.  
  75. //fclose($fp);
  76.  
  77.  
  78. }else{
  79.  
  80. echo $error;
  81. }
  82.  
  83.  
  84.  
  85.  
  86. }
  87.  


Ten post edytował Gothicbezimienny 4.07.2016, 09:41:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
emstawicki
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Próbowałeś wysłać nagłówek Content-type ustawiony na text/csv?
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


tak i daje to to taki sam efekt a właściwe jego brak (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(Gothicbezimienny @ 4.07.2016, 10:05:24 ) *
  1. header("Content-type: teapplication/octet-streamxt");


Co to za nagłówek?

  1. header("Content-type: text/csv");

lub
  1. header("Content-type: application/octet-stream");

Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


Tak małą pomyłka podczas prób zanim napsiałem na forum ale po poprawieniu na wskazane przez ciebie nagłówki nie daje to żadnego efektu. Plik się nie tworzy.
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Wyrzuć tymczasowo nagłówki i wrzuć w while var_dump($r);
Zobaczysz czy na pewno są jakieś wiersze.
Go to the top of the page
+Quote Post
emstawicki
post
Post #7





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Otrzymujesz jakiś błąd php?

Nie łatwiej będzie wczytać dane do tablicy, utworzyć plik, wypełnić danymi (fputcsv) a potem wysłać nagłówki do pobrania?
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #8





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


Tak są, sprawdziłem każdy krok w kodzie za pomocą var_dump i wszystko wygląda dobrze poza tym, ze nie tworzy pliku ;/


emstawicki:
Nie mam błędu żadnego.
Łatwiej pojęcie względne, i tak i tak nie jest to jakiś wysoki poziom. Wziąłem się od tej strony i dziwi mnie to że nie działa chciałbym wiedzieć dlaczego w końcu uczymy się na błędach, oczywiście jeśli nie dojde do tego jak to naprawić to spróbuje innego sposobu narazie chciałby spróbować zrobić to tak jak jest aktualnie.
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Czy ten kod wyrzuca u Ciebie plik?
  1. $r=array('abc','def','ghi');
  2.  
  3.  
  4. $line = '';
  5.  
  6. foreach( $r as $value ){
  7.  
  8. if ( ( !isset( $value ) ) || ( $value == "" ) ){
  9.  
  10. $value = "\t";
  11.  
  12. }else{
  13.  
  14. $value = str_replace( '"' , '""' , $value );
  15. $value = '"' . $value . '"' . "\t";
  16. }
  17.  
  18. $line .= $value;
  19. }
  20.  
  21. $data .= trim( $line ) . "\n";
  22.  
  23.  
  24. $data = str_replace( "\r" , "" , $data );
  25.  
  26. if ( $data == "" ){
  27.  
  28. $data = "\nNo Record(s) Found!\n";
  29.  
  30. }
  31.  
  32.  
  33. header("Content-type: application/octet-stream");
  34. header("Content-Disposition: attachment; filename='faktury.csv'");
  35. header("Pragma: no-cache");
  36. header("Expires: 0");
  37. print "$header\n$data";
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #10





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


trueblue

Niestety nie wyrzuca pliku, wypisuje mi wartości na ekran, lecz niestety pliku nie tworzy. Domyślam się ze Tobie tak i to problem gdzieś u mnie tylko ciekawe dlaczego (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #11





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Ja to od zawsze robię za pomocą funkcji PHP http://php.net/manual/en/function.fputcsv.php
Go to the top of the page
+Quote Post
emstawicki
post
Post #12





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Upewnij się czy nie wysyłasz wcześniej nigdzie nagłówków.
Powinno to działać w największym uproszczeniu, czyli:
  1. <?
  2. header("Content-type: application/octet-stream");
  3. header("Content-Disposition: attachment; filename=faktury.csv");
  4. header("Pragma: no-cache");
  5. header("Expires: 0");
  6. print "Hello World\nSimple data";

Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #13





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


emstawicki miałeś racje blokowały to wcześniejsze nagłówki.


Mam nowe pytanie czy przy tworzeniu csv da sie jakoś zdefiniować wielkość kolumn w excel ponieważ zbyt długie dane wyglądają dość nieładnie "krzaczki " póki nie powiększy się rozmiaru kolumn samemu.(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


PHPExcel: http://stackoverflow.com/questions/1676189...ze-column-width
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #15





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


chodziło mi w ciąg dalszy w temacie przy użyciu fputcsv, poniewaz tworze plik csv, który ma byc otwierany w EXCEL (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #16





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Tak więc podałem rozwiązanie, które umożliwia automatyczne ustalanie szerokości kolumn.
W pliku csv nie jest to możliwe.
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #17





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


Cytat
W pliku csv nie jest to możliwe.


To jest dla mnie odpowiedź. Dziękuje.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 16:45