PHP - ngarkimi i të dhënave në Excel nga një bazë të dhënash MySQL. PHP - Ngarkoni të dhëna në Excel nga baza e të dhënave MySQL Ngarkoni tabelën php në Excel

.
Metoda e paraqitur në atë shënim është vërtet shumë e thjeshtë, por mund të mos jetë gjithmonë e përshtatshme.
Ka shumë mënyra të tjera për të transferuar të dhëna tabelare nga PHP në Excel, unë do të përshkruaj atë që më dukej më e thjeshta dhe funksionale. Duhet të theksohet veçanërisht se nuk po flas për gjenerimin e një skedari xls, por vetëm sugjeroj që përdoruesi të hapë të dhënat e marra duke përdorur Excel në mënyrë që përdoruesit që nuk kanë përvojë në programim të mos e vërejnë falsifikimin.

Pra, gjëja e parë që duhet të bëni është të vendosni në faqen tonë një lidhje me një skript që gjeneron titujt e mëposhtëm:
header ("Pragma: publike");
header ("Skadon: 0");
header("Cache-Control: must-revalidate, post-check=0, para-check=0");
header ("Cache-Control: private", false);
header("Lloji i përmbajtjes: aplikacion/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header ("Content-Transfer-Encoding: binary");
header("Gjatesia e permbajtjes: " . $object->getFileSize());

$object është një objekt sferik në një vakum, të cilin secili lexues e zbaton si të dojë. Qëllimi i marrësve getFileName() dhe getFileSize() është i qartë nga emrat. Këtu ia vlen të theksohet një nuancë jo e dukshme (falë savostinit që më kujtoi për këtë) - getFileName() sigurisht që mund të kthejë çdo emër skedari, por nëse dëshironi që shfletuesi të ofrojë hapjen e përmbajtjes së marrë në Excel, atëherë Zgjatja e skedarit duhet të jetë xls.
Unë nuk kam thënë asgjë të re ende, e gjithë kjo u shpik para meje, megjithatë, si dhe ajo që do të përshkruhet më poshtë.
Siç u theksua me të drejtë në komentet e postimit në lidhje me gjenerimin e xls në PHP, Excel është shumë më i shpejtë me XML. Por avantazhi më i rëndësishëm, ndoshta, nuk është ende në shpejtësi, por në shumë më tepër mundësitë. Unë nuk do të gërmoj në të egra, por do të jap vetëm një shembull të thjeshtë dhe një lidhje me të pershkrim i detajuar të gjitha etiketat.

Pra, pasi të krijohen titujt, duhet t'i japim përdoruesit të dhënat aktuale. Zakonisht e mbështjell gjenerimin e tabelave në një metodë të veçantë:
echo $object->getContent();

Dhe unë gjeneroj tabelën duke përdorur Smarty:

(përpara nga=$data.header item=caption) ($caption.columnName)(/per secilin)(përpara nga=$data.content item=rresht) (përpara nga=$row item=col) ($col)(/per secilin)(/per secilin)

Siç mund ta shihni nga kodi, grupi $data që përmban dy vargje i kalohet shabllonit - linja e kokës së tabelës dhe të dhënat aktuale.
Vlen të përmendet se përdorimi i një motori shabllon vetëm për të gjeneruar XML është disi i shtrenjtë, dhe ka shumë mënyra të tjera për të marrë XML. Në rastin tim të veçantë, gjenerimi XML është vetëm një bonus i vogël në një projekt të madh ku një motor shabllon është i domosdoshëm.

Si shembull, unë dhashë tabelën më të thjeshtë, nëse dëshironi, mund të manipuloni një numër shumë më të madh atributesh. Kjo është veçanërisht e këndshme kur mendoni se nuk kërkohen biblioteka të palëve të treta për zbatim.
Metoda e përshkruar ka punuar në të njëjtin projekt për disa vite, dhe asnjë përdorues i vetëm nuk ka dyshuar ende se të dhënat që ai hap nuk janë një dokument MS Office.

Mund të lexoni më shumë rreth strukturës XML të përdorur në MS Excel në

.
Metoda e paraqitur në atë shënim është vërtet shumë e thjeshtë, por mund të mos jetë gjithmonë e përshtatshme.
Ka shumë mënyra të tjera për të transferuar të dhëna tabelare nga PHP në Excel, unë do të përshkruaj atë që më dukej më e thjeshta dhe funksionale. Duhet të theksohet veçanërisht se nuk po flas për gjenerimin e një skedari xls, por vetëm sugjeroj që përdoruesi të hapë të dhënat e marra duke përdorur Excel në mënyrë që përdoruesit që nuk kanë përvojë në programim të mos e vërejnë falsifikimin.

Pra, gjëja e parë që duhet të bëni është të vendosni në faqen tonë një lidhje me një skript që gjeneron titujt e mëposhtëm:
header ("Pragma: publike");
header ("Skadon: 0");
header("Cache-Control: must-revalidate, post-check=0, para-check=0");
header ("Cache-Control: private", false);
header("Lloji i përmbajtjes: aplikacion/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header ("Content-Transfer-Encoding: binary");
header("Gjatesia e permbajtjes: " . $object->getFileSize());

$object është një objekt sferik në një vakum, të cilin secili lexues e zbaton si të dojë. Qëllimi i marrësve getFileName() dhe getFileSize() është i qartë nga emrat. Këtu ia vlen të theksohet një nuancë jo e dukshme (faleminderit që më kujtuat për këtë) - getFileName () sigurisht që mund të kthejë çdo emër skedari, por nëse dëshironi që shfletuesi të ofrojë hapjen e përmbajtjes së marrë në Excel, atëherë zgjatja e skedarit duhet të jetë xls.
Unë nuk kam thënë asgjë të re ende, e gjithë kjo u shpik para meje, megjithatë, si dhe ajo që do të përshkruhet më poshtë.
Siç u vu re me të drejtë në komentet e shënimit, Excel punon shumë më shpejt me XML. Por avantazhi më i rëndësishëm, ndoshta, nuk është ende në shpejtësi, por në mundësi shumë më të gjera. Unë nuk do të gërmoj në të egra, por do të jap vetëm një shembull të thjeshtë dhe një lidhje me një përshkrim të hollësishëm të të gjitha etiketave.

Pra, pasi të krijohen titujt, duhet t'i japim përdoruesit të dhënat aktuale. Zakonisht e mbështjell gjenerimin e tabelave në një metodë të veçantë:
echo $object->getContent();

Dhe unë gjeneroj tabelën duke përdorur Smarty:

(përpara nga=$data.header item=caption) ($caption.columnName)(/per secilin)(përpara nga=$data.content item=rresht) (përpara nga=$row item=col) ($col)(/per secilin)(/per secilin)

Siç mund ta shihni nga kodi, grupi $data që përmban dy vargje i kalohet shabllonit - linja e kokës së tabelës dhe të dhënat aktuale.
Vlen të përmendet se përdorimi i një motori shabllon vetëm për të gjeneruar XML është disi i shtrenjtë, dhe ka shumë mënyra të tjera për të marrë XML. Në rastin tim të veçantë, gjenerimi XML është vetëm një bonus i vogël në një projekt të madh ku një motor shabllon është i domosdoshëm.

Si shembull, unë dhashë tabelën më të thjeshtë, nëse dëshironi, mund të manipuloni një numër shumë më të madh atributesh. Kjo është veçanërisht e këndshme kur mendoni se nuk kërkohen biblioteka të palëve të treta për zbatim.
Metoda e përshkruar ka punuar në të njëjtin projekt për disa vite, dhe asnjë përdorues i vetëm nuk ka dyshuar ende se të dhënat që ai hap nuk janë një dokument MS Office.

Mund të lexoni më shumë rreth strukturës XML të përdorur në MS Excel në

Për shumë njerëz, kur punojnë me PHP në lidhje me MySQL Ekziston një nevojë e tillë si eksportimi i të dhënave nga baza e të dhënave në formatin xls, në mënyrë që njerëzit që kanë nevojë për këto të dhëna t'i përpunojnë ato në Excel ose thjesht ta bëjnë të përshtatshëm për përdoruesit që t'i shikojnë këto të dhëna. Kohët e fundit kam pasur një nevojë të tillë dhe sot do t'ju tregoj se si mund të zbatohet ky biznes.

Duhet të them menjëherë se kjo metodë është mjaft e thjeshtë, por të dhënat ngarkohen normalisht.

Për të filluar, unë do të jap një shembull të skedarit përfundimtar xls, në Excel ngarkimi do të duket diçka si kjo:

Me fjalë të tjera, asnjë imazh ose stil nuk do të ngarkohet, vetëm titujt e kolonave dhe vetë të dhënat.

Para se të vija në një opsion të tillë ngarkimi, u përpoqa të ngarkoja në formatin csv, por doli pak i ngathët, më pas u përpoqa të vizatoja një tabelë dhe ta ruaja me shtrirjen xls, gjithashtu doli një lloj marrëzi, metoda që do të përshkruaj tani më përshtatet plotësisht dhe tani do ta ndaj me ju.

Për të filluar, unë do të jap sa më shumë kodin që kam komentuar, mund ta zgjidhni dhe ta ruani me shtesën php dhe ta provoni, thjesht mos harroni të vendosni cilësimet e lidhjes së bazës së të dhënave.

Eksportoni të dhëna nga MySQL në Excel në PHP

Dhe në mënyrë që të kuptoni se cilat të dhëna shkarkoj, unë do të jap një shembull të një tabele të thjeshtë në bazën e të dhënave ( Kam testin e emrit të saj):

Tabela e provës:

id Emri emri
1 Ivanov Ivan
2 Petrov Pjetri
2 Petrov2 Petr2
xlsData = paketë ("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0); ) // Nëse funksioni i numrit RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $value); kthim; ) //Nëse funksioni i tekstit RecText($row, $col, $value)( $len = strlen($value); $this->xlsData .= pack(" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len); $this->xlsData .= $value; return; ) // Fut funksionin e numrit InsertNumber($value)(nëse ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $value); $this->countCol++; return; ) // Fut funksionin e tekstit InsertText($value)( if ($this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecText($this->countRow, $this->countCol, $value); $this->countCol++; return; ) // Zhvendos në një funksion të ri rreshti GoNewLine()( $this->countCol = 0 ; $this->countRow++; return; ) //Funksioni i të dhënave Fundi EndData()( $this->xlsData .= pack("ss", 0x0A, 0x00); kthimi; ) // Ruaj funksionin e skedarit SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // Dërgo funksionin e skedarit SendFile()( $this->EndData(); kreu (" Ndryshuar së fundi: " . gmdate("D,d M YH:i:s") . "GMT"); titulli ("Cache-Control: pa dyqan, pa memorie, duhet të rivlerësohet"); titulli (" Pragma: pa cache"); header ("Content-lloj: application/x-msexcel"); header ("Content-Disposition: attachment; fileName=$this->fileName.xls"); print $this- >xlsData ; ) ) if(isset($_GET["id"])) (//filtro të dhënat $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES)))); $ filename = "File_with_id_".$id; // vendosni emrin e skedarit $excel = new ExportToExcel(); // krijoni një shembull të klasës $sql="SELECT * FROM test.test ku id = $id";// pyetje në bazën e të dhënave $rez= mysql_query($sql); $excel->InsertText("ID"); $excel->InsertText ("Mbiemri"); $excel->InsertText ("Emri"); $excel ->GoNewLine(); while($ row=mysql_fetch_assoc($rez))($excel->InsertNumber($row["id"]); $excel->InsertText($row["firstname"]); $excel->InsertText($row["emri"]); $excel->GoNewLine(); ) $excel->SaveFile($filename); ) ?>

E gjithë ideja këtu është në funksion paketë (), i cili i paketon të dhënat në një varg binar, dhe ne, nga ana tjetër, e plotësojmë në mënyrë sekuenciale këtë varg me të dhënat që kemi shkarkuar nga baza e të dhënave mysql duke përdorur funksionin normal mysql_query ().

Për të kontrolluar performancën e këtij kodi, duke qenë se keni krijuar një lidhje me bazën e të dhënave dhe keni krijuar një tabelë të ngjashme, mund të dërgoni kërkesën e mëposhtme:

Http://your_site/file_name. php?id=2

Dhe duhet të shkarkoni dy rreshta me id të barabartë me 2.

Dhe tani, kushdo që ju lejoni të ngarkojë të dhëna, mund t'i eksportojë lehtësisht në të kompjuter lokal përmes ndërfaqes së internetit. Kjo metodë është e përshtatshme si për përdoruesit e korporatave, nëse jeni duke zhvilluar një aplikacion për organizatën tuaj, ashtu edhe për përdoruesit e faqes tuaj të internetit në internet. Shpresoj se kjo metodë ju ka ndihmuar. Paç fat!

(të dhënat e marra nga baza e të dhënave mysql) për të pasur sukses. Unë jam duke përdorur Zend Framework. Më duhet të bëj disa ndryshime në të dhënat e mia përpara se të eksportoj në Excel. Në fakt, më duhet vërtet të krijoj një libër mujor të parave të gatshme.

Kam lexuar shumë dokumente, por kam përfunduar në rrëmujë. Unë me të vërtetë nuk e kuptoj se si të filloj. A kam vërtet nevojë për Dardhë? A duhet të ngarkoj ndonjë bibliotekë klase? A nuk ka një mënyrë të lehtë për ta bërë këtë?

ju falenderoj paraprakisht

Unë ju sugjeroj të përdorni bibliotekën PHPExcel PHPExcel. Është vërtet i fuqishëm, mbështet formate të ndryshme, mund të bëjë formatimin vizual dhe është i lehtë për t'u përdorur.

Mund të mësoni më shumë rreth saj në faqen e tyre të internetit: http://phpexcel.codeplex.com/. (PHPExcel tashmë është zhvendosur në https://github.com/PHPOffice/PHPExcel)

Shembull përdorimi:

$objPHPExcel = i ri PHPExcel(); /** Mund të vendosni shumë veti */ $objPHPExcel->getProperties()->setCreator("My Company") ->setLastModifiedBy("John Doe") ->setTitle("Raporti vjetor") ->setSubject("Shitjet" ") ->setDescription("Raporti vjetor i shitjeve nga John Doe") ->setCategory("Financa"); /** Zgjidhni një nga fletët */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** Thjesht vendosni vlerën e qelizës */ $activeSheet->setCellValue("A1", "shumës");

Ju mund të bëni shumë më tepër, sigurisht, duke lexuar skedarë excel, vendosja e stileve vizuale, krijimi i grafikëve, shprehjeve dhe më shumë.

Shkrova një raport të variacionit të inventarit me 94 rreshta ku marr të dhëna nga MySQL (6 kb+rekord për tabelë), krijoj një grup shumëdimensional nga të dhënat e MySQL, tërheq nga tabela të shumta, më pas hedh gjithçka në një rresht dhe gjeneroj një .xls Kështu:

Nuk kërkohen zgjerime.

Të vetmet paralajmërime janë se unë nuk e kam kuptuar ende se si t'i nxjerr .xls pa Excel, duke ju thënë se të dhënat mund të korruptohen - dhe nuk kam provuar të bëj formatimin ose ndonjë gjë më të komplikuar sesa thjesht "eksportimi" i të dhënave , skedari/të dhënat në ok sigurisht, por gjeneron një paralajmërim nga excel.

EDIT: Duhet të vërej se "setup" dhe "dump" i referohen: daniweb.com

Ju mund të përdorni bibliotekën phpexcel. Kjo ju lejon të shkruani dhe lexoni nga formate të ndryshme skedarësh të fletëllogaritëse

për t'u integruar me zend mund të përdorni ndihmën e lidhjes së mëposhtme.

Ju mund të përdorni CSV për të krijuar një format të importueshëm për excel. Kjo është mënyra më e lehtë për ta bërë atë.

CSV duket kështu:

"përmbajtja ime e parë e qelizës", "përmbajtja ime e dytë e qelizës", "përmbajtja ime e tretë e qelizës" "rreshti i dytë, përmbajtja e qelizës së parë", "etj", "etj

Çdo rresht përfaqëson Rreshti i Excel-it, ju vendosni përmbajtjen e qelizës midis thonjëzave të dyfishta dhe ndani me presje. Kini kujdes nëse keni disa nga të dhënat tuaja, kjo mund të thyejë CSV-në tuaj dhe të krijojë linja të reja të padëshiruara.

Me pak Google do ta gjeni këtë: http://www.the-art-of-web.com/php/dataexport/

Përgatitja e të dhënave

$data = array(array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25), array ("firstname" => "Amanda", "mbiemri" => " Miller", "age" => 18), array ("firstname" => "James", "lastname" => "Brown", "mosha" => 31), array ("firstname" => "Patricia", "mbiemri" => "Williams", "age" => 7), array("firstname" => "Michael", "lastname" => "Davis", "age" => 43), array ("emri" => "Sarah", "lastname" => "Miller", "mosha" => 24), array ("firstname" => "Patrick", "lastname" => "Miller", "mosha" => 27) );

Hapi i parë është nxjerrja e të dhënave në format të kufizuar me skeda (mund të përdoret gjithashtu CSV, por është pak më e ndërlikuar). Për këtë përdorim kodin e mëposhtëm:

Ne vendosëm llojin e përmbajtjes në tekst/i thjeshtë në mënyrë që rezultati të mund të shihet më lehtë në një shfletues. Ndryshe, pasi nr Formatimi HTML, dalja do të shfaqet si një rresht i vetëm teksti.

Rreshti i parë i daljes do të jetë titujt e kolonave (në këtë rast përdoren emrat e fushave). Vlerat ndahen me skedë \t dhe rreshta me ndërprerje rreshtash \n. Rezultati duhet të duket diçka si kjo:

Mbiemri mosha Mary Johnson 25 Amanda Miller 18 James Brown 31 Patricia Williams 7 Michael Davis 43 Sarah Miller 24 Patrick Miller 27

Ka një dobësi në këtë kod që mund të mos jetë menjëherë e dukshme. Po sikur një nga fushat që do të dalin tashmë përmban një ose më shumë karaktere skedash, ose më keq, një linjë të re? Kjo do të shkaktojë të gjithë procesin pasi ne jemi duke u mbështetur në këto karaktere për të treguar kolonat dhe ndërprerjet e rreshtave.

Zgjidhja është t'i "ikni" karaktereve të skedës. Në këtë rast, ne do t'i zëvendësojmë skedat me \t fjalë për fjalë dhe ndërprerjet e rreshtave me fjalë për fjalë \n në mënyrë që ato të mos ndikojnë në formatimin:

Tani, përpara se çdo rreshti të ketë jehonë, çdo karakter i skedës zëvendësohet me "\t" në mënyrë që kolonat tona të mos prishen. Gjithashtu çdo ndërprerje rreshti brenda të dhënave zëvendësohet me "\n".



Artikuj të ngjashëm: