Excel-dən php-ə məlumatların yüklənməsi. Cədvəl məlumatları PHP-dən Excel-ə köçürməyin asan yolu. MySQL-dən PHP-də Excel-ə verilənləri ixrac edin

(mysql verilənlər bazasından əldə edilən məlumatlar) uğur qazanmaq üçün. Mən Zend Framework istifadə edirəm. Excelə ixrac etməzdən əvvəl məlumatlarımda bəzi dəyişikliklər etməliyəm. Əslində, mən əslində aylıq kassa kitabı yaratmalıyam.

Çoxlu sənədləri oxudum, amma özümü bir qarışıqlıqda tapdım. Həqiqətən necə başlayacağımı bilmirəm. Mənə həqiqətən ARMUZ lazımdırmı? Hər hansı sinif kitabxanasını yükləməliyəm? Bunun asan yolu yoxdurmu?

əvvəlcədən təşəkkürlər

Mən sizə PHPExcel kitabxanasından istifadə etməyi təklif edirəm. Bu, həqiqətən güclüdür, bir çox formatı dəstəkləyir, vizual formatlaşdırma edə bilir və istifadəsi asandır.

Bu barədə daha çox məlumatı onların veb səhifəsində tapa bilərsiniz: http://phpexcel.codeplex.com/, (PHPExcel artıq https://github.com/PHPOffice/PHPExcel ünvanına köçüb)

İstifadə nümunəsi:

$objPHPExcel = yeni PHPExcel(); /** Bir çox xassələri təyin edə bilərsiniz */ $objPHPExcel->getProperties()->setCreator("Mənim şirkətim") ->setLastModifiedBy("John Doe") ->setTitle("İllik hesabat") ->setSubject("Satış" ") ->setDescription("Con Doe tərəfindən illik satış hesabatı") ->setCategory("Maliyyə"); /** Vərəqlərdən birini seçin */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** Sadəcə olaraq xananın dəyərini təyin edin */ $activeSheet->setCellValue("A1", "cəm");

Siz, əlbəttə ki, excel fayllarını oxumaq, vizual üslublar qurmaq, qrafiklər, ifadələr yaratmaq və daha çox şey edə bilərsiniz.

Mən 94 sıra inventar dəyişikliyi hesabatı yazdım, burada MySQL-dən məlumat götürdüm (cədvəl üçün 6kb + qeydlər), MySQL məlumatlarından çoxölçülü massiv yaratdım, birdən çox cədvəldən götürdüm və sonra hər şeyi bir sıraya töküb .xls yaratdım Beləliklə:

Uzatma tələb olunmur.

Yeganə xəbərdarlıqlar odur ki, mən Excel olmadan .xls-i necə tükürməyi hələ başa düşməmişəm, məlumatların korlanmış ola biləcəyini bildirirəm - və mən formatlaşdırma və ya məlumatları "ixrac etməkdən" daha mürəkkəb bir şey etməyə çalışmamışam, Fayl/məlumat, əlbəttə ki, yaxşıdır, lakin Excel-dən xəbərdarlıq yaradır.

EDIT: Qeyd etməliyəm ki, "quraşdırma" və "dump" aşağıdakılara istinad edir: daniweb.com

Siz phpexcel kitabxanasından istifadə edə bilərsiniz. Bu, müxtəlif cədvəl fayl formatlarından yazmağa və oxumağa imkan verir

zend inteqrasiyası üçün aşağıdakı linkdən istifadə edə bilərsiniz.

Excel üçün idxal edilə bilən format yaratmaq üçün CSV-dən istifadə edə bilərsiniz. Bunu etməyin ən asan yolu budur.

CSV belə görünür:

"birinci hüceyrə məzmunum", "ikinci hüceyrə məzmunum", "üçüncü hüceyrə məzmunum" "ikinci sətir, birinci hüceyrə məzmunu", "və s.", "və s.

Hər sətir Excel sətirini təmsil edir, siz hüceyrənin məzmununu qoşa dırnaqlar arasında yerləşdirir və vergüllə ayırırsınız. Bəzi məlumatlarınız varsa, ehtiyatlı olun, o, CSV-ni poza və istənməyən yeni sıralar yarada bilər.

Bir az Google ilə bunu tapa bilərsiniz: http://www.the-art-of-web.com/php/dataexport/

Məlumatların hazırlanması

$data = massiv(massiv("ad" => "Məryəm", "soyad" => "Conson", "yaş" => 25), array("ad" => "Amanda", "soyad" => " Miller", "yaş" => 18), array("ad" => "James", "soyad" => "Qəhvəyi", "yaş" => 31), array("ad" => "Patricia", "soyad" => "Williams", "yaş" => 7), array("ad" => "Maykl", "soyad" => "Davis", "yaş" => 43), array("ad" => "Sarah", "soyad" => "Miller", "yaş" => 24), array("ad" => "Patrick", "soyad" => "Miller", "yaş" => 27) );

İlk addım verilənləri tab ilə ayrılmış formatda çıxarmaqdır (CSV də istifadə edilə bilər, lakin bir az daha mürəkkəbdir). Bunu etmək üçün aşağıdakı kodu istifadə edirik:

Nəticənin brauzerdə daha asan görünməsi üçün məzmun növünü mətn/düz olaraq təyin etdik. Əks halda, HTML formatı olmadığı üçün çıxış mətnin tək sətri kimi görünəcək.

Çıxışın ilk sətri sütun başlıqları olacaq (bu halda sahə adları istifadə olunur). Dəyərlər nişanı \t və sətir fasilələri ilə \n ayrılır. Nəticə belə görünməlidir:

Ad soyad yaşı Meri Conson 25 Amanda Miller 18 James Brown 31 Patricia Williams 7 Michael Davis 43 Sarah Miller 24 Patrick Miller 27

Bu kodda dərhal aydın olmayan bir zəiflik var. Çıxarılmalı olan sahələrdən birində artıq bir və ya daha çox nişan simvolu və ya daha pisi, yeni sətir varsa nə olacaq? Bu, bütün prosesi işə salacaq, çünki biz sütunları və sətir fasilələrini göstərmək üçün bu simvollara etibar edirik.

Həll tab simvollarından "qaçmaq"dır. Bu halda, biz tabları hərfi \t, sətir fasilələrini isə hərfi \n ilə əvəz edəcəyik ki, onlar formata təsir göstərməsin:

İndi, hər bir sətir əks-səda verməzdən əvvəl, sütunlarımızın qırılmaması üçün istənilən nişan simvolu "\t" ilə əvəz olunur. Həmçinin, verilənlər daxilindəki hər hansı sətir fasilələri "\n" ilə əvəz olunur.

.
Həmin qeyddə təqdim olunan üsul həqiqətən çox sadədir, lakin həmişə əlverişli olmaya bilər.
Cədvəl məlumatlarını PHP-dən Excel-ə köçürməyin bir çox başqa yolu var, mənə ən sadə və funksional görünən birini təsvir edəcəyəm. Xüsusilə qeyd etmək lazımdır ki, mən xls faylı yaratmaqdan danışmıram, sadəcə olaraq istifadəçiyə Excel proqramından istifadə edərək qəbul edilən məlumatları açmağı təklif edirəm ki, proqramlaşdırmada təcrübəsi olmayan istifadəçilər saxtakarlığı görməsinlər.

Beləliklə, etməli olduğunuz ilk şey səhifəmizə aşağıdakı başlıqları yaradan skriptə keçid yerləşdirməkdir:
başlıq("Praqma: ictimai");
başlıq("Son vaxt: 0");
header("Keş-nəzarət: yenidən doğrulanmalıdır, yoxlandıqdan sonra=0, əvvəlcədən yoxlama=0");
başlıq("Keş-nəzarət: şəxsi", yanlış);
başlıq("Məzmun növü: proqram/x-msexcel");
header("Məzmun-Dispozisiya: əlavə; fayl adı=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
başlıq("Məzmun-transfer-kodlaşdırma: ikili");
header("Məzmun-uzunluq: " . $object->getFileSize());

$obyekt vakuumda olan sferik obyektdir və hər bir oxucu onu istədiyi kimi həyata keçirə bilər. getFileName() və getFileSize() alıcılarının məqsədi adlarından aydındır. Burada bir qeyri-aşkar nüansı vurğulamağa dəyər (bu barədə mənə xatırlatdığınız üçün təşəkkürlər) - getFileName() əlbəttə ki, istənilən fayl adını qaytara bilər, lakin əgər siz brauzerin qəbul edilmiş məzmunu Excel-də açmağı təklif etməsini istəyirsinizsə, onda fayl uzantısı xls olsun.
Mən hələ yeni bir şey deməmişəm ki, bütün bunlar məndən əvvəl icad edilib, eynilə aşağıda təsvir olunacaq.
Məqalənin şərhlərində haqlı olaraq qeyd edildiyi kimi, Excel XML ilə daha sürətli işləyir. Ancaq ən vacib üstünlük, bəlkə də, sürət deyil, daha geniş imkanlardır. Mən alaq otlarına daha dərindən girməyəcəyəm, ancaq sadə bir nümunə və bütün etiketlərin ətraflı təsvirinə bir keçid verəcəyəm.

Beləliklə, başlıqlar yaradıldıqdan sonra istifadəçiyə faktiki məlumatları verməliyik. Mən adətən masa generasiyasını ayrı bir üsulla bağlayıram:
echo $object->getContent();

Və mən Smarty istifadə edərək cədvəl yaradıram:

(foreach from=$data.header element=başlıq) ($caption.columnName)(/foreach)(foreach from=$data.content element=sətir) (foreach from=$sətir elementi=col) ($col)(/foreach)(/foreach)

Koddan göründüyü kimi, $data massivi iki massivdən ibarət şablona ötürülür - cədvəlin başlıq xətti və verilənlərin özü.
Qeyd etmək lazımdır ki, şablon mühərrikindən yalnız XML yaratmaq üçün istifadə etmək bir qədər bahalıdır və XML bir çox başqa yollarla əldə edilə bilər. Mənim xüsusi vəziyyətimdə, XML generasiyası şablon mühərrikinin əvəzolunmaz olduğu böyük bir layihədə sadəcə kiçik bir bonusdur.

Nümunə olaraq, mən sadə bir cədvəl verdim, istəsəniz, daha çox sayda atributla manipulyasiya edə bilərsiniz; Tətbiq etmək üçün üçüncü tərəf kitabxanalarının tələb olunmadığını nəzərə alsaq, bu xüsusilə gözəldir.
Təsvir edilən üsul bir neçə ildir bir layihə üzərində işləyir və hələ heç bir istifadəçi açdığı məlumatların MS Office sənədi olmadığından şübhələnməyib.

MS Excel-də istifadə olunan XML strukturu haqqında ətraflı oxuya bilərsiniz

Çoxları üçün işləyərkən PHP MySQL ilə birlikdə Verilənlərin verilənlər bazasından xls formatına ixracı kimi ehtiyac var ki, bu məlumatlara ehtiyacı olan insanlar onu Excel-də emal etsin və ya istifadəçilər üçün bu məlumatlara baxmaq rahat olsun. Bu yaxınlarda mənim belə bir ehtiyacım var idi və bu gün sizə bu məsələnin necə həyata keçirilə biləcəyini söyləyəcəyəm.

Dərhal deyəcəyəm ki, bu üsul olduqca sadədir, lakin məlumatlar normal şəkildə yüklənir.

Başlamaq üçün Excel-də son xls faylına bir nümunə verəcəyəm, yükləmə bu kimi görünəcək:

Başqa sözlə, heç bir şəkil və ya üslub yüklənməyəcək, yalnız sütun başlıqları və verilənlərin özləri.

Bu xüsusi yükləmə seçiminə gəlməmişdən əvvəl csv formatına yükləməyə çalışdım, amma bir az yöndəmsiz oldu, sonra cədvəl çəkib xls uzantısı ilə saxlamağa çalışdım, bu da bir növ cəfəngiyat oldu, indi təsvir edəcəyim üsul mənə tamamilə uyğun gəldi və indi bunu sizinlə paylaşacağam.

Başlamaq üçün, mümkün qədər şərh etdiyim bütün kodu təqdim edəcəyəm, onu seçib php uzantısı ilə qeyd edib sınaya bilərsiniz, sadəcə olaraq verilənlər bazasına qoşulmaq üçün parametrləri qeyd etməyi unutmayın.

MySQL-dən PHP-də Excel-ə verilənləri ixrac edin

Hansı məlumatları yüklədiyimi başa düşməyiniz üçün verilənlər bazasında sadə bir cədvəl nümunəsi verəcəyəm ( Onun adı testim var):

Test cədvəli:

id ad ad
1 İvanov İvan
2 Petrov Peter
2 Petrov2 Peter 2
xlsData = paket("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0);

) // Əgər nömrə funksiyası RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $value); //Əgər mətn funksiyası RecText($row, $col, $value)( $this->xlsData .= pack); (" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len $this->xlsData .= $value ) // InsertNumber($value)(; əgər ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ dəyər $this->countCol++ return ) // InsertText($value)( if ($this->countCol == $this->totalCol) ( $this->countCol = 0; $this-); >countRow++ ) $this->RecText($this->countCol, $this->countCol++); // GoNewLine())( $this->; countCol = 0 ; $this->countRow++ return ) //EndData() ( $this->xlsData .= pack("ss", 0x0A, 0x00); qayıtmaq;) // Fayl funksiyasını yadda saxla SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // Fayl funksiyasını göndər SendFile())( $this->EndData(); başlıq (" Son Dəyişiklik: " . gmdate("D,d M YH:i:s") . " GMT" başlığı ("Keş-nəzarət: mağaza yoxdur, önbellek yoxdur, yenidən təsdiq edilməlidir"); header (" Pragma: no-cache" başlığı("Content-type: application/x-msexcel"); fileName=$this->fileName.xls"); ->xlsData ; ) ) ) if(isset($_GET["id"])) ( //verilənləri süzün $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES)) ; $filename = "File_with_id".$id; // faylın adını təyin edin $excel = new ExportToExcel(); //verilənlər bazasına sorğu $rez= mysql_query($sql); $excel->InsertText("Son Ad"); excel->GoNewLine( row=mysql_fetch_assoc($rez))( $excel->InsertNumber($row["id"]); $excel->Mətn daxil et($sətir["ad"]); müntəzəm funksiyadan istifadə etməklə mysql_query().

Verilənlər bazası ilə əlaqəni konfiqurasiya etdiyinizi və oxşar cədvəl yaratdığınızı nəzərə alaraq, bu kodun funksionallığını yoxlamaq üçün aşağıdakı sorğunu göndərə bilərsiniz:

Http://saytınız/fayl_adınız. php?id=2

Və 2-yə bərabər id ilə iki sətir boşaltmalısınız.

İndi məlumatı yükləməyə icazə verdiyiniz hər kəs onu veb interfeysi vasitəsilə asanlıqla öz yerli kompüterinə ixrac edə bilər. Bu üsul həm korporativ istifadəçilər üçün, həm də təşkilatınız üçün bir proqram hazırlayırsınızsa, və İnternetdə veb saytınızın istifadəçiləri üçün əlverişlidir. Ümid edirəm bu üsul sizə kömək etdi. Uğurlar!

.
Həmin qeyddə təqdim olunan üsul həqiqətən çox sadədir, lakin həmişə əlverişli olmaya bilər.
Cədvəl məlumatlarını PHP-dən Excel-ə köçürməyin bir çox başqa yolu var, mənə ən sadə və funksional görünən birini təsvir edəcəyəm. Xüsusilə qeyd etmək lazımdır ki, mən xls faylı yaratmaqdan danışmıram, sadəcə olaraq istifadəçiyə Excel proqramından istifadə edərək qəbul edilən məlumatları açmağı təklif edirəm ki, proqramlaşdırmada təcrübəsi olmayan istifadəçilər saxtakarlığı görməsinlər.

Beləliklə, etməli olduğunuz ilk şey səhifəmizə aşağıdakı başlıqları yaradan skriptə keçid yerləşdirməkdir:
başlıq("Praqma: ictimai");
başlıq("Son vaxt: 0");
header("Keş-nəzarət: yenidən doğrulanmalıdır, yoxlandıqdan sonra=0, əvvəlcədən yoxlama=0");
başlıq("Keş-nəzarət: şəxsi", yanlış);
başlıq("Məzmun növü: proqram/x-msexcel");
header("Məzmun-Dispozisiya: əlavə; fayl adı=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
başlıq("Məzmun-transfer-kodlaşdırma: ikili");
header("Məzmun-uzunluq: " . $object->getFileSize());

$obyekt vakuumda olan sferik obyektdir və hər bir oxucu onu istədiyi kimi həyata keçirə bilər. getFileName() və getFileSize() alıcılarının məqsədi adlarından aydındır. Burada bir qeyri-aşkar nüansı vurğulamağa dəyər (bunu xatırlatdığınız üçün savostin sayəsində) - getFileName() əlbəttə ki, istənilən fayl adını qaytara bilər, lakin əgər siz brauzerin Excel-də qəbul edilmiş məzmunu açmağı təklif etməsini istəyirsinizsə, o zaman fayl uzantısı xls olmalıdır.
Mən hələ yeni bir şey deməmişəm ki, bütün bunlar məndən əvvəl icad edilib, eynilə aşağıda təsvir olunacaq.
PHP-də xls generasiyası haqqında yazıya verilən şərhlərdə haqlı olaraq qeyd edildiyi kimi, Excel XML ilə daha sürətli işləyir. Ancaq ən vacib üstünlük, bəlkə də, sürət deyil, daha geniş imkanlardır. Mən alaq otlarına daha dərindən getməyəcəyəm, ancaq sadə bir nümunə və bütün etiketlərin ətraflı təsvirinə bir keçid verəcəyəm.

Beləliklə, başlıqlar yaradıldıqdan sonra istifadəçiyə faktiki məlumatları verməliyik. Mən adətən masa generasiyasını ayrı bir üsulla bağlayıram:
echo $object->getContent();

Və mən Smarty istifadə edərək cədvəl yaradıram:

(foreach from=$data.header element=başlıq) ($caption.columnName)(/foreach)(foreach from=$data.content element=sətir) (foreach from=$sətir elementi=col) ($col)(/foreach)(/foreach)

Koddan göründüyü kimi, $data massivi iki massivdən ibarət şablona ötürülür - cədvəlin başlıq xətti və verilənlərin özü.
Qeyd etmək lazımdır ki, şablon mühərrikindən yalnız XML yaratmaq üçün istifadə etmək bir qədər bahalıdır və XML bir çox başqa yollarla əldə edilə bilər. Mənim xüsusi vəziyyətimdə, XML generasiyası şablon mühərrikinin əvəzolunmaz olduğu böyük bir layihədə sadəcə kiçik bir bonusdur.

Nümunə olaraq, mən sadə bir cədvəl verdim, istəsəniz, daha çox sayda atributla manipulyasiya edə bilərsiniz; Tətbiq etmək üçün üçüncü tərəf kitabxanalarının tələb olunmadığını nəzərə alsaq, bu xüsusilə gözəldir.
Təsvir edilən üsul bir neçə ildir bir layihə üzərində işləyir və hələ heç bir istifadəçi açdığı məlumatların MS Office sənədi olmadığından şübhələnməyib.

MS Excel-də istifadə olunan XML strukturu haqqında ətraflı oxuya bilərsiniz