PHPExcel (2-qism)
Assalomu alaykum! Oldingi maqolamda PHPExcel haqida ozgina ma’lumot berib o’tgandim. Bugun bu mavzuni batafsil yoritaman. Shuni ham ta’kidlash joizki, o’tgan maqolamda ozgina xatoliklar yuz bergan (bir necha so’zlar tushib qolgan). Men maqolalarimni oldin Wordda tayyorlab keyin saytga joylayman (chunki saytning matn muharriri qulay emas, TinyMCEning oddiy turi bo’lganda ham zo’r bo’lardi), copy&paste da bir necha so’zlar belgilanmay qolibdi, bu xatoni takrorlamaslikka harakat qilaman. O’tgan postda PHPExcel kutubxonasini qayerdan yuklab olishni va o’rnatishni yozdim (menimcha bu ko’pchilikka cho’t emas). Shu sabab bu maqolada serverga (yoki localhostga) arxivdan chiqarish, require() yoki include() orqali PHPExcel.php faylini biriktirish kabilarni yozmay to’g’ridan-to’gri bazadan boshlayman.
Demak, bizda akademik litseyga qabul qilingan o’quvchilar bazasi bor (MySQL), biz endi shu bazadagi o’quvchilar haqidagi ma’lumotlarni excel faylga eksport qilishimiz zarur. Marxamat boshladik.
1.Ma’lumotlar ombori
Keling baza nomini oquvchilar deb nomlaylik va jadval nomi umumiy_royxat bo’lsin. Serverda yangi connection.php faylini yaratamiz va MySQLi orqali baza bilan aloqa o’rnatamiz:
2. Eksport qilish uchun excel fayl shabloni:
Excel yordamida quyidagicha shablonni yaratamiz va Excel 2007 ko’rinishda «shablon.xls» nomi bilan (qo’shtirnoqsiz) saqlaymiz, quyidagi shablon Excel 2016 da tayyorlangan lekin Excel 2007 ko’rinishda saqlangan, sababi PHPExcel hozircha Excel 97 dan Excel 2007 gacha bo’lgan versiyalarda ishlaydi (dokumentatsiyasida ham shunday yozilgandi adashmasam, lekin agar erinmasangiz Excel 2010, 2016 da ham sinab ko’ring).
Bu shablonni PHPExcel kutubxonasi yordamida ham yaratsa bo’lardi, lekin uni oldindan Excel dasturi yordamida tayyorlab qo’yish qulay deb o’ylayman.
3. Eksport
Endi yana bitta yangi fayl yaratamiz uni exporter.php deb nomlaymiz. Biz endi bazadgi ma’lumotlarni yuqoridagi shablon bo’yicha eksport qilishimiz kerak. Shablonda ko’rinadiki ma’lumotlar kiritiladigan satr A7 maydonidan (yacheykasidan) boshlangan. Quyidagi kodga e’tibor bering $row o’zgaruvchisi yani satr raqami 7 qilib belgilangan. Misollardagi biz yaratgan barcha fayllar bitta katalogda! PHPExcel kutubxonasi /localhost/phpexcel/ katalogiga joylashtirilgan Kodlar quyidagicha:
setActiveSheetIndex(0); //faylning eng birinchi betidan foydalanganimiz uchun faol kitob indeksi 0 bo'ladi $sheet = $excel->getActiveSheet(); //kitob (Книга) uchub obyekt havolasini yaratamiz $commonList = $db->query("SELECT * FROM `umumiy_royxat`"); //umumiy ro'yxatni bazadan tanlaymiz $row = 7; //satr indeksi $num = 1; // tartib raqam while($pupils = $commonList->fetch_object()) { $sheet->cellValue("A".$row,$num); // tartib raqami An katakda (n - indeks) $sheet->cellValue("B".$row,$pupils->ism); //ismi Bn katakda (n - indeks) $sheet->cellValue("C".$row,$pupils->familya); //familyasi Cn katakda (n - indeks) $sheet->cellValue("D".$row,$pupils->sharifi); //sharifi Dn katakda (n - indeks) $sheet->cellValue("E".$row,$pupils->tugilgan_sana);//tug'ilgan sanasi En katakda (n - indeks) $sheet->cellValue("F".$row, $pupils->jinsi); //jinsi Fn katakda (n - indeks) $sheet->cellValue("G".$row,$pupils->millati);//millati Gn katakda (n - indeks) // har bir maydon ramkalarini qora rangga bo'yaymiz $sheet->getStyle('A'.$row.':G'.$row)->getBorders()->getLeft()->applyFromArray( array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ); $sheet->getStyle('A'.$row.':G'.$row)->getBorders()->getRight()->applyFromArray( array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ); $sheet->getStyle('A'.$row.':G'.$row)->getBorders()->getBottom()->applyFromArray( array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ); $sheet->getStyle('A'.$row.':G'.$row)->getBorders()->getTop()->applyFromArray( array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ); $num++; //tartib raqamni bittaga oshiramiz $row++; //ustun raqamini bittaga oshiramiz } $name = "O`quvchilar_".date("d.m.Y").".xlsx"; header("Content-Type: application.vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header("Content-Disposition: attachment; filename='".$name."' "); header("Cache-Control: max-age=0"); //faylni generatsiya qilamiz $file = PHPExcel_IOFactory::createWriter($excel, "Excel2007"); //avtomatik yuklab olinadi $file->save('php://output'); ?>
Demak agar brouzer orqali exporter.php sahifasiga kirsak, generatsiya qilingan fayl avtomatik yuklab olinadi.
Hujjatni ochamiz va bu hujjat quyidagicha bo’lishi kerak:
E’tiboringiz uchun raxmat! Agar kodlarda yoki matnda qandaydir men bilmagan, anglamagn xatolarni sezsangiz oldindan uzr, hali unchalik tajribali blogger emasman.
Web Dasturlash
PHPExcel (2-qism)