NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: PHP generování CSV (v PHP nebo v knihovně PHPExcel)?

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
petr.jouza
Člen
Avatar
petr.jouza:16.8.2017 18:47

Ahoj po dlouhé době,
dokázal by mi někdo poradit s problémem generování CSV v PHP?

Co potřebuji:
z databáze načíst seznam a vygenerovat CSV.
Načtení dat z DB problém není, ale CSV mi dělá problémy, hlavně jeho struktura.

Výsledné CSV by mělo vypadat následovně:

1;první sloupec; druhý sloupec; třetí sloupec
2;první sloupec; druhý sloupec; třetí sloupec
3;první sloupec; druhý sloupec; třetí sloupec
atd...

a navíc bych ho potřeboval k kódování ANSI

když jsem si zkoušel hrát s funkcemi fopen, fputcsv, fwrite, fclose, tak jsem se dostal pouze k výsledku s kódováním UTF-8 a v zobrazení CSV v excelu bylo v pořádku, ale když jsem ho editoval v poznámkovém bloku, tak jsem měl vše v jedné řádce.

Zkoušel jsem si pohrát i s knihovnou PHPExcel, tam však se mi nepodařilo zapsat do souboru data (pouze vytvořit CSV). (S knihovnou PHPExcel jsem zatím nikdy nepracoval, ale budu potřebovat se s tím seznámit :) )

Po internetu jsem nenašel nic co by mi můj problém srozumitelně vysvětlilo. Většina jen nějaké staré články.

K tomu výslednému CSV: Je zajímavé, že CSV, které potřebuji vygenerovat u více slovných buněk není v uvozovkách. Tzn.: když bude zapsáno třeba [jméno, prijmeni], tak v tom CSV je to bez uvozovek. Vždy se mi podařilo vygenerovat text pouze s uvozovkami.

Předem děkuji všem kdo se mi pokusí snažit pomoct.

 
Odpovědět
16.8.2017 18:47
Avatar
petr.jouza
Člen
Avatar
Odpovídá na petr.jouza
petr.jouza:17.8.2017 12:43

Tak už jsem na to přišel... Sice asi blbým způsobem, ale výsledek je funkční :)

Moje řešení:

$soubor = fopen("soubor.txt", "w") ;
$textCsv = '' ;
$generovatCsv = Db::queryAll('DB DOTAZ') ;
foreach ($generovatCsv as $csv) {$textCsv .= 'řádek; $csv['slupec']; první
' ;} # Tento enter udělá další řádek
$textEncode = iconv('UTF-8', 'Windows-1250', $textCsv) ;
fwrite($soubor, $textEncode);
fclose($soubor) ;
$souborNazev = "název souboru.csv" ;
$souborNazevEncode = iconv('UTF-8', 'Windows-1250', $souborNazev) ;
rename("soubor.txt", $souborNazevEncode) ;
header('Location: '.$souborNazev) ;

Sice je to řešení asi nestandartní, ale funkční. Kdyby někdo přišel na něco lepšího nebo co je vyloženě špatně, tak sem s tím :)

Díky

PS: Asi jsem i předtím zapomněl dodat, že jedu přes XAMPP na Windows a tudíž jsem potřeboval i formátování pro Windows.

 
Nahoru Odpovědět
17.8.2017 12:43
Avatar
Peter Trcka
Člen
Avatar
Peter Trcka:21.8.2017 0:33

ahoj len doplnim

prechod na novy riadok pomocou retazca:
"\n"

 
Nahoru Odpovědět
21.8.2017 0:33
Avatar
petr.jouza
Člen
Avatar
Odpovídá na Peter Trcka
petr.jouza:21.8.2017 6:29

Ahoj,
to jsem zkoušel. V excelu se mito zobrazilo správně, ale v CSV to byl jeden souvislý text. (nechápu proč). Proto jsem musel zvolit enter na konci.

$textCsv .= 'řádek; $csv['slupec']; první
' ;} # Tento enter udělá další řádek

Pak se to zobrazilo dobře.

Ale díky za pokus.

 
Nahoru Odpovědět
21.8.2017 6:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.