[MySQL][PHP]Eksport do excela - format liczb, Mają być przecinki zamiast kropek |
[MySQL][PHP]Eksport do excela - format liczb, Mają być przecinki zamiast kropek |
22.01.2019, 19:55:54
Post
#1
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
Php wyświetla mi dane z bazy MySql. Ale potrzebuję też eksport tych danych do Excela (a właściwie do formatu csv).
Znalazłem gdzieś kod, który miał to robić, ale nie działał. Trochę go poprawiłem i Excel już ładnie mi ładuje ten plik csv. Niestety w obecnej postaci ten plik jest bezużyteczny - liczby nie zawierają przecinków, tylko kropki. Próbowałem zmusić PHP do zmiany formatu liczb, ale wymiękłem. Może ktoś mi pomóc? Kod <?php $host = 'localhost'; $user = 'admin'; $pass = 'tajne_haslo'; $db = 'nieruchomosci'; $table = 'budynki'; $file = 'bron_12-14'; $link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error()); mysql_select_db($db) or die("Can not connect."); mysql_query('SET NAMES CP1250'); $zapytanie = "SELECT * FROM $table WHERE `ID` LIKE '5' "; $result = mysql_query ("SHOW COLUMNS FROM ".$table.""); $i = 0; if (mysql_num_rows($result) > 0) { while ($row = mysql_fetch_assoc($result)) { $csv_output.= $row['Field'].";"; $i++; } } $csv_output.= "\n"; $values = mysql_query($zapytanie); $liczba1 = mysql_query("SELECT `Pow_Uzyt` FROM $table WHERE `ID` LIKE '5' "); $flicz1 = number_format($liczba1, 2, ',', ' '); while ($rowr = mysql_fetch_row($values)) { $csv_output.= "\n"; for ($j=0;$j<$i;$j++) { $csv_output.= $rowr[$j].";"; $flicz1; } $csv_output.= ";"; } $filename = $file."_".date("Y-m-d_H-i",time()); header("Content-type: application/vnd.ms-excel"); header("Content-disposition: csv" . date("Y-m-d") . ".csv"); header("Content-disposition: filename=".$filename.".csv"); print $csv_output; exit; ?> Kolumn z liczbami dziesiętnymi mam 6. Tutaj na razie użyłem tylko jednej `Pow_Uzyt`. |
|
|
22.01.2019, 23:06:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Lub po prostu -------------------- |
|
|
23.01.2019, 08:44:40
Post
#3
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 33 Dołączył: 8.09.2014 Ostrzeżenie: (0%) |
albo number_format z trzecim parametrem
|
|
|
24.01.2019, 20:12:30
Post
#4
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
Lub po prostu Dzięki za zainteresowanie. Niestety, nie bardzo wiem gdzie to wstawić w kodzie, który mam. Jakaś podpowiedź? |
|
|
25.01.2019, 07:17:35
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
W ogóle polecam tworzyć tablicę a nie stringi
a następnie użyć funkcji Sporóbuj w zapytaniu SQL po SELECT dodać coś takiego:
Ten post edytował Tomplus 25.01.2019, 07:18:14 |
|
|
25.01.2019, 11:56:18
Post
#6
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
Sporóbuj w zapytaniu SQL po SELECT dodać coś takiego:
Niestety, wymiękam. Zmienna Kod $zapytanie = "SELECT * FROM $table WHERE `ID` LIKE '5' "; musi być. Próbowałem utworzyć nową zmienną, a potem podstawić ją w dalszym zapytaniu, ale nie działa. Kod $comma = "SELECT FORMAT($zapytanie, 2, 'de_DE')"; Tam dalej w kodzie (patrz pierwszy post) mam utworzoną nową zmienną Kod $values = mysql_query($zapytanie); zatem zrobiłem coś takiego: Kod $values = mysql_query($comma); No i to właśnie nie działa. Nie wiem, czy dobrze kombinuję, ale myślę, że coś z "SELECT FORMAT" jest nie tak. Generalnie chodzi mi o to, aby tylko liczby dziesiętne były sformatowane przecinkiem (mam jeszcze w tabeli liczby całkowite). |
|
|
25.01.2019, 12:04:45
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Musisz łyknąć więcej wiedzy na temat zapytań SQL, ja tylko pokazałem przykład, a nie całe poprawne zapytanie, poprawnie będzie gdy dodasz do niego jeszcze FROM i WHERE
|
|
|
25.01.2019, 12:05:00
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
W kodzie masz
Logicznym jest że miałeś to sobie podstawić w tej linii
-------------------- |
|
|
25.01.2019, 13:14:42
Post
#9
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
Tyle się nakombinowałem, a rozwiązanie bardzo proste.
Wklejam cały kod.
Linia nr 39 tylko wymagała poprawy. Ale jest jeden mały szkopuł. W jednej kolumnie czasem w tekście pojawia sie kropka i ona jest zamieniana na przecinek. Nie bardzo mi to pasuje. Jak zrobić, aby zamiana następowała tylko dla wartości float? Ten post edytował Therminus 25.01.2019, 15:48:43 |
|
|
25.01.2019, 14:32:38
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
|
|
|
25.01.2019, 16:49:12
Post
#11
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
Sorry, pomyłka. Zamroczyło mnie.
Nie mam float, tylko decimal. I tak musi zostać. będzie gorzej, prawda? |
|
|
25.01.2019, 19:20:55
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Nie pytaj się tylko sprawdź. Decimal to także liczba zmiennoprzecinkowa.
|
|
|
28.01.2019, 12:51:19
Post
#13
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
|
|
|
28.01.2019, 13:01:12
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
@Tomplus
is_float('2.5') nigdy nie zwroci ci true Dosc ciekawe rozwiazanie podal viking. Czemu go skrzetnie omijacie? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
28.01.2019, 15:24:36
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
@Nospor
Prawda A co do rozwiązania Vikinga, to ja go podałem najpierw. |
|
|
28.01.2019, 15:26:31
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat A co do rozwiązania Vikinga, to ja go podałem najpierw. Tez prawda. Wybacz, jechalem od dolu do gory i stanalem na pierwszym poprawnym rozwiazaniu, ktore w tej kolejnosci padlo na Vikinga
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
28.01.2019, 20:35:38
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Co do:
is_float('2.5') ja zasugerowałem naszemu koledze żeby sprawdził w ogóle jakie dane dostarcza mu baza danych SQL, jeżeli to string to is_float -> FALSE. @Therminus Tutaj masz mały eksperyment, możesz sprawdzić działanie u siebie lub np. na takich stronach jak: http://phptester.net/ Wszystkie liczby są stringami lub typu float.
|
|
|
29.01.2019, 09:53:16
Post
#18
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat is_float('2.5') ja zasugerowałem naszemu koledze żeby sprawdził w ogóle jakie dane dostarcza mu baza danych SQL, Jak pobierasz dane z bazy to one sa zawsze STRING nawet jesli w bazie to FLOAT. O to mi chodzilo. Wiec sprawdzanie na danych z bazy is_float nie ma zadnego sensu.-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
29.01.2019, 16:39:43
Post
#19
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
dlatego teraz sugeruję is_numeric
|
|
|
30.01.2019, 15:57:27
Post
#20
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 24.05.2015 Ostrzeżenie: (0%) |
@Tomplus is_float('2.5') nigdy nie zwroci ci true Dosc ciekawe rozwiazanie podal viking. Czemu go skrzetnie omijacie? Rozwiązanie istotnie jest ciekawe i zapytanie SQL rzeczywiście zwraca przecinki, ale takich kolumn z liczbami decimal mam 6. Nie bardzo widzę możliwość zastosowania tego rozwiązania. Na początku myślałem, że jak utworzę 6 zmiennych ($liczba1, $liczba2 itd) to mi się na coś przydadzą, ale teraz widzę, że nie. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 15:50 |