Php cədvəli excel üçün saxla. Məlumatları php-dən Excel-ə ixrac edin. MySQL-dən PHP-də Excel-ə verilənləri ixrac edin

.
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, yoxlamadan 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");
başlıq("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, bütün bunlar məndən əvvəl icad edilib, lakin aşağıda təsvir olunacaqlar kimi.
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();

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

.
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, yoxlamadan 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");
başlıq("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 təşəkkür edirəm) - 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ı olmalıdır. xls olsun.
Mən hələ yeni bir şey deməmişəm, bütün bunlar məndən əvvəl icad edilib, lakin aşağıda təsvir olunacaqlar kimi.
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 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();

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

(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. O, 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 ətraflı onların veb səhifəsində oxuya 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 zədələnə biləcəyini bildirirəm - və 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ına qoyursunuz və onları 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, formata təsir göstərməsin:

İndi, hər bir sətir əks-səda verilmə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.

Ç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.

Yükləmək üçün tam olaraq bu seçimə gəlməmişdən əvvəl csv formatında 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 sizə mümkün qədər şərh verdiyim bütün kodları verim, onu seçib php uzantısı ilə yadda saxlaya və 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 ( Məndə onun adı testi 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, $ value); $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" başlığı ("Content-Disposition: attachment; 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"]); $excel->Mətn daxil et($sətir["ad"]); $excel->GoNewLine(); ) $excel->SaveFile($filename); ) ?>

Burada bütün fikir funksiyadır paket(), məlumatları ikili sətirdə yığır və biz də öz növbəmizdə bu sətri verilənlər bazasından endirdiyimiz verilənlərlə ardıcıl olaraq doldururuq. MySql normal 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!