Urak!
Elegáns és gyors megoldást tud valaki a fenti problémára?
A feladatot nehezíti, hogy ékezetes szavak is vannak az adatok között.
(Phpmyadminban az "export csv"-t az ékezetek miatt nem jól veszi be az excel, - csak az openoffice, viszont az nem tud xlsx-re konvertálni.)
Egy megoldás - lentebb többen tanácsolták:
2 db 1 milliós csv-t húzzunk le mondjuk phpmyadminnal (nem fog belefagyni, hiszen nem processzor ill memóriaigényes csv-t gyártani)
majd excelben:
Data menü -> get external data -> import text file. És itt be lehet állítani a karakterkódolástól kezdve minden hasznosat.
végül az output.xlsx két darab sheeten fért el, és 90 MB lett :)
- 4308 megtekintés
Hozzászólások
Ha van valami programozási gyakorlat, akkor ezzel szerintem tudsz ilyet generálni egyszerűen: http://phpexcel.codeplex.com/
Biztos van egyszerűbb is, de hátha nem.
Szerk.:
"Phpmyadminban az "export csv"-t az ékezetek miatt nem jól veszi be az excel, - csak az openoffice, viszont az nem tud xlsx-re konvertálni."
- De xls-be kéne neki tudni és azt a 2007-es Office meg tudja xlsx-be menteni.
- A hozzászóláshoz be kell jelentkezni
ha se az openoffice, se a libreoffice, se a phpmyadmin nem tud xlsx-be írni 65000 sornál többet, akkor félő, hogy a fenti tool sem fog.
Amúgy azt sejtem, hogy a Phpmyadminba pont ez a phpexcel van beépítve. (fixme)
- A hozzászóláshoz be kell jelentkezni
"Amúgy azt sejtem, hogy a Phpmyadminba pont ez a phpexcel van beépítve."
Lehet, de szerintem nem. A phpmyadmin csak csv-t tud nem? Azaz nem xls-be vagy xlsx-be?
Ez nem csv-t generál tudtommal, hanem rendes xlsx-et.
- A hozzászóláshoz be kell jelentkezni
http://wiki.phpmyadmin.net/pma/PHPExcel
utána néztem, igazam volt.
Igazándiból azért nem tudom kiexportálni xlsx-ben, mert a gépemben lévő 30.000 ezer rekordhoz kell neki 20 perc, és 4 giga ram.
- A hozzászóláshoz be kell jelentkezni
Oh, akkor köszi az infót :)
Gondolom a sok ram az azért kell neki, mert nem jól van megírva.
Talán először az egészet memóriába akarja tenni.
A 20 perc az akár reális is lehet.
- A hozzászóláshoz be kell jelentkezni
nem eleg ha atkonvertalod az exportalt csv-t excel-nek megfelelo kodolasra (asszem utf16 kell neki)?
- A hozzászóláshoz be kell jelentkezni
de lehet hogy elég volna, viszont nem tudom hogy pontosan mire kéne hogy konvertáljam.
Windows1250?
Nomeg mivel konvertálok át egy 76 Mb-os text file-t OSX alatt? Az editor amivel meg próbáltam nyitni, már egy 5 mb-os file-ra is meghalt.
- A hozzászóláshoz be kell jelentkezni
nemide
----
올드보이
http://molnaristvan.eu/
- A hozzászóláshoz be kell jelentkezni
mint mondtam valszeg utf16 lesz jo neki, konvertalasra meg iconv, alapbol megtalalhato a makkosixen is
- A hozzászóláshoz be kell jelentkezni
Jaja igazad van, esetleg én még ODBC -felé kutakodnék, gondolom olyant is tud az OSX.
----
올드보이
http://molnaristvan.eu/
- A hozzászóláshoz be kell jelentkezni
Próbáld inkább xml -be exportálni, a mysql client tud ilyent, a phpmyadmin is (tudtommal), és ha a felhasználást sem akarod lehetetlenné tenni akkor id, dátum, akármi logika alapján darabold ~25000 sor méretűre a kimenetet.
----
올드보이
http://molnaristvan.eu/
- A hozzászóláshoz be kell jelentkezni
igen, de aztán az excel nem képes mit kezdeni az xml file-al.
- A hozzászóláshoz be kell jelentkezni
Pedig a microsoft szerint tud olyant: http://office.microsoft.com/en-us/excel-help/import-xml-data-HP01020640…
Mi több mintha én is csináltam volna olyant
Én ezt az egészet parancssorból csinálnám és a convertálást iconv -al csinálnám. Más felől meg ha office 2007+ akkor az nem esik kétségbe az utf-8/16 -tól
----
올드보이
http://molnaristvan.eu/
- A hozzászóláshoz be kell jelentkezni
Ez döbbenet és tényleg nem megy bele az xml :@ a leírás amit belinkeltem hölyeség, még a saját exportját sem tudja importálni :@
Esetleg ha tudsz csinálj ODBC -t és azon keresztül kérdezgess le közvetlenül az excel -be, ja és 1048576 sornál több nem fér az excle 2007 -be
----
올드보이
http://molnaristvan.eu/
- A hozzászóláshoz be kell jelentkezni
pedig a csv, majd excel200x-ben save as xlsx a megoldás... az xlsx bonyolultabb formátum mint az xls, pedig az utóbbi bináris konténer...
phpmyadminban próbáld azt, hogy minden mező köré "-t rakatsz, ezt lehet hogy hexában kell megadnod ha nem megy és utf16-ban, ahogy fentebb említették.
Ha nem megy, holnap rápróbálok melóból.
Esetleg load data outfile, majd sed.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
a probléma a karakterkódolással van. Az exportált adator megnyitja az excel, de az ékezetek helyett krixkrax van. Latin1-Latin2-utf8-cp1250, stb, sok mindent próbáltam pedig :(
- A hozzászóláshoz be kell jelentkezni
Excel cvs importban állítsd be a kódolást talán. (Adatok -> Szövegből -> megnyitod -> itt beállítod a kódolást)
--
Don't be an Ubuntard!
- A hozzászóláshoz be kell jelentkezni
> az "export csv"-t az ékezetek miatt nem jól veszi be az excel
nyitsz egy üres táblát, aztán excelben Data -> Import external data, és ott szépen be tudod nyalni a csv-t tetszőleges karakterkódolással. (az office2007/2010-ben nyilván valahol eldugták a ribbonon ezt a funkciót, de gondolom ugyanúgy meg lehet csinálni, mint a "rendes" excelben)
- A hozzászóláshoz be kell jelentkezni
Köszi, ez segített!
- A hozzászóláshoz be kell jelentkezni
Végigfutottam a 2007-es Excel sorain, de 1048576 volt az utolsó érték. Ez messze van a 2 milliótól, amit a címben említesz.
- A hozzászóláshoz be kell jelentkezni
úbaszki, ez elfelejtettem beflémeli, hogy az office2007 65535-ről csak 1048576-ra növelte a sorok max számát, szal 2milka sor nem fog beférni :) (csv-be se, hardlimit)
na, látom már megtették.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
A legegyszerűbb megoldás: generáltass egy HTML táblázatot, csak ez legyen a fileban, és nevezd áz .XLS-re. Az Excel meg fogja nyitni, onnan meg mentsd el xlsx-ként. Az egyik leghasznosabb Excel-hack :)
- A hozzászóláshoz be kell jelentkezni
Nem fog menni, régi Excel 65536 sort támogat, új ~1M-t.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Jó gondolat lehet a csv, főleg ha tabszeparáltan készíted az exportot (átláthatóbb lesz). A feldarabolás kihagyhatatlan feladat 2 x 1.000.000 soros csv fájlokra. Többen javasolták a "daraboló" scriptet, fogadd meg. ;) Viszont ...
* (Phpmyadminban az "export csv"-t az ékezetek miatt nem jól veszi be az excel, - csak az openoffice, viszont az nem tud xlsx-re konvertálni.)
Feltételezem UTF8-ban van a MySQL adatbázisod és az exportált fájl is. Így ha megnyitáskor beállítod a karakter kódolást utf8-ra, akkor nem lehet vele gond. Másik dolog, hogy eddigi tapasztalataim alapján az MS Office Excel sosem tudta a csv-t feldolgozni normálisan, ha ;-vel van szeparálva a fájl, nagyon enyhén kifejezve tudatlan hozzá. A megoldás, a csv kiterjesztést átírod txt-re, majd azt megnyitod Excelben és felkínálja, hogy válaszd ki mivel van szeparálva a fájlod. Utána mentheted a megnyitott fájlokat .xlsx-be vagy amibe szükséges.
- A hozzászóláshoz be kell jelentkezni
2 millió sort nem táblázatkezelőben, hanem adatbázisban tartunk, az való arra. onnantól kezdve, hogy legalább kettő részre szét kell cincálni a listát, már elvész az értelme a számolótáblának, hiszen szűrni, számoltatni a teljes adathalmazon nem fog tudni, hiszen fele itt, a másik fele meg amott lesz, de performanciában (pl. rendezés) is eléggé gyengén fog muzsikálni.
- A hozzászóláshoz be kell jelentkezni
Az adattárolás részével tökéletesen egyetért mindenki, viszont sok, hozzá nem értő ügyfélnek elég nehéz bemagyarázni, hogy amit kér az ne export, hanem egy DB dump legyen, ha pl. migrálásról van szó, mert a kettő nem ugyan az. Sajnos ilyen fejetlenségből sokat láttam, az ügyfél pedig makacs a legtöbb esetben.
- A hozzászóláshoz be kell jelentkezni
Oda kell neki rakni a jó esetben két bazi nagy, rosszabb esetben két nagy, meg egy pici fájlt, hogy itt van, kezdjél vele valamit... Bár ha netán laponként lehet xls-ben 1M sort kezelni (nem tudom, az ilyen, határokat feszegető baromságokat szerencsére eddig sikerült elkerülni), akkor két lap, meg jó sok memória, és belefér az :-))
- A hozzászóláshoz be kell jelentkezni
Csak úgy: Mit kezdenétek egy 2 millió soros xls-el?
- A hozzászóláshoz be kell jelentkezni
Ha csak diagramok, statisztikák készítéséhez kell az egész művelet, akkor inkább adatbázisból kérdezd le a szükséges adatokat, és a kapott eredményt tedd át Excel-be. Szerintem ez lenne a legegyszerűbb, persze ha nincs valami kizáró oka...
- A hozzászóláshoz be kell jelentkezni
amire nagyjabol szukseged van:
http://sourceforge.net/projects/mysql-python/
http://packages.python.org/openpyxl/
eddig nekem ez a kombinacio mukodott a legjobban.
OpenBSD 4.7/i386 theo for the prezident:D
- A hozzászóláshoz be kell jelentkezni
egyebkent pedig, ha valami komolyabb
Business intelligence (BI) moka a cel akkor:
OpenBSD 4.7/i386 theo for the prezident:D
- A hozzászóláshoz be kell jelentkezni
Az én két centem (amellett, hogy egyetértek azokkal, akik szerint eleve őrültség millió sort akármilyen excelben tartani):
Én perlben csinálnám. A MySQL részére a dolognak ott van a DBI, ami bejáratott és jól dokumentált dolog, az XLSX-re pedig az Excel::Writer::XLSX, ami ugyan új, de aktívan fejlesztett és nagyrészt működik. A kettő között pedig ízlés szerint lehet a karakter-kódolást kijavítani (az Encode::* modulokkal például).
- A hozzászóláshoz be kell jelentkezni
Az megvan ugye amit fentebb többen is írtak, hogy az xls-be max 65535 sor fér, xlsx-be pedig csak 1048576? ami kb pont a fele a kétmilliónak?
Az ötletek mind jók, de a végső lépést, az xlsx-be mentést nem fogjátok tudni megcsinálni. Vagy ha igen, akkor az excel kétezersok nem fogja tudni megnyitni.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Világos.
Nemhogy 1048576, de 104857 sorral is gyakorlatilag használhatatlan lesz az eredmény. Erre írtam, hogy őrültség. De ahogy Matisz nagypapa mondta, ha iparkodnak, maguknak iparkodnak.
- A hozzászóláshoz be kell jelentkezni
szerény és jelentéktelen véleményem szerint már ezer sor felett kell a probléma megoldását áttenni rdbms-be, bár egyes kollégáim szerint ez 2-5k körül van, mások szerint ami nem fér ki a képernyőre, annak adatbázisban a helye.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Ezt az "Ami nem fér ki a képernyőre, annak adatbázisban a helye." dolgot felveszem az aranyköpések közé, ha megengeditek :-)
- A hozzászóláshoz be kell jelentkezni
Nekem ezt a főnököm így mondta: "azt a programrészt, ami (megjegyzésekkel együtt) nem fér ki egy képernyőre, azt szét kell darabolni szubrutinokra (gy. k. függvény, eljárás, procedura)". Hozzáteszem, ezt a 80x24-es terminálok idején mondta.
Mindez látszólag az olvashatatlan kódok írására serkenti az embert, de nem sok nála áttekinthetőbben kódolóval találkoztam.
- A hozzászóláshoz be kell jelentkezni
rohadtul igaza van.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
+1.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
mért? nincs igazam?
vidd, ha gondolod :)
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Majd arról is számolj be, hogy hogyan tudják használni ezt a buznyák nagy számolólepedőt :-)
- A hozzászóláshoz be kell jelentkezni
Szűrnek, keresnek, ellenőriznek benne.... Olyan kollegák ezek, akiknek esélytelen az excelen kívül bármi mást a kezükbe adni.
+ normális munkavégzésnek számít nekik a 200 oszlopos excel file, soktízezer (százezer) sorral, egyes műveletek között a több perc várakozás, majd az eredmény kimásolása egy másik excelbe (10-20 mb), majd ezeknek az e-mailen való küldözgetése.
Szóval agyrém az ami itt megy, szerencsére csak nagyon adhoc módon veszek ebben részt. Ekkor az excel file-okat beleteszem mysql-be, a kért feladatot végrehajtom, majd kiexportálom.
Az exportálást eddig úgy oldottam meg (500 ezer rekordra kb), hogy:
-export csv,
-majd openoffice-val megnyitás,
-majd tabokra szétvágtam (50 ezer soronként),
-xls-be mentés, majd
-excellel megnyitás
-tabokról egy tabra visszamásolás
-xlsx-ben elmentés
no a fenti műveletsor egy 500 ezres csv esetén kb 2,5 órát vett igénybe (lassú a 2,7 ghz-es core2duo-s, 4GRam-os imac-em ehhez), nem beszélve arról az időről, amit más módszerek próbálgatásával töltöttem.
Szóval agyrém, agyrém!!!
- A hozzászóláshoz be kell jelentkezni
500 ezres csv esetén kb 2,5 órát vett igénybe
vegulis, ha megfizetik...
- A hozzászóláshoz be kell jelentkezni
ha állandóan ezt kéne csinálnom, akkor nem lenne az a pénz. De komolyan nem. Szörnyen demotivál, ha olyan dolgot kell csinálnom, amit egy átlagos informatikai sklil-el rendelkező gimnazista is meg tudna csinálni.
De 2 havonta egy-egy ilyen az bőven elmegy.
- A hozzászóláshoz be kell jelentkezni
Nem akarok nálatok megváltani az akarata ellenére sem pénzügyest, sem marketingest, de esetleg ha felvetnéd nékik, hogy mondjanak egy v. több olyan szempontot, amely csoportosítási tényező lehetne, és azok szerint nyomnád N darab fájlba azt a dbdumpot, még tán valamelyik csokit is vinne, mert észrevenné, hogy ugyan nem talál meg mindig mindent egy oldalon, de az egyenkénti megnyitás-feldolgozás-bezárások (ha már egyszer úgyis csak ennyire képesek egy közgáz után) élményindexe veri a homokóráét.
- A hozzászóláshoz be kell jelentkezni
Perl-ben az n. darab tabot tartalmazó xls generálása egy script, utána meg az Excel-ben szintén móricka-szintű progi összemásol.
- A hozzászóláshoz be kell jelentkezni
nehany tipp: phpmyadmin csv gyartasnal mindenfele okos stringmuveletet csinal, ami meglepoen le tudja lassitani az exportot.
excel-t ugy lehet ravenni hogy egy CSV-t utf-8 encodinggal nyissa meg, hogy beszursz a csv export elejere egy BOM-ot.
anno nekem a realtime generalt csv-knel a kovetkezo php kod megoldotta hogy a letoltott fajlt az Excel megnyissa, es megfelelo encodinggal tegye:
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=multi_headword.csv");
// BOM
echo chr(239).chr(187).chr(191);
ezutan jottek a sorok, oszlopok " kozott, ;-vel elvalasztva.
ahogy fentebb javasoltak mysqldump is tud csv-be menteni, de kozvetlenul hasznalhatod a SELECT ... INTO OUTFILE szintakszist is.
az export_options reszben megadhatod hogyan legyenek elvalasztva a sorok es az oszlopok.
ez lenne a leggyorsabb megoldas, utana mar csak egy BOM-ot kellene beszurnod, ha jol emlekszem, es szepen UTF-8-al nyitna az excel.
ps: uhh, igen az 50k-s sorlimitet elfelejtettem. :/
ps2: erdemes lehet megnezni a kovetkezo 2 libet, ha jol emlekszem a topicnyito otthon van a PHP-ben:
https://github.com/iliaal/php_excel fizetos libxl libre PHP wrapper
http://phpexcel.codeplex.com/
Tyrael
- A hozzászóláshoz be kell jelentkezni
Csak az utokor kedveert, hatha valaki megtalalja meg a threadot:
- phpexcel egy nagyon jo cucc, sokat tud es eleg jol, de NE akarja senki hasznalni gigantikus tablazatokra, mert ahhoz tul lassu.
Tyra3lnek meg annyit tudnek hozzafuzni meg, hogy az Exceles 64K/1M-s harlimitet sehogy sem fogja tudni atlepni - ahogy irtak tobben is -, akarmilyen libet is javasol.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni