Генериране на ценови листи в Excel с помощта на PHP
В днешния урок ще решим такъв проблем. Тоест ще се научим как да генерираме документ във формат на електронни таблици на Excel с помощта на езика PHP и специалната библиотека PHPExcel. Това е много мощна и много широко използвана библиотека с огромна функционалност. Разбира се, няма да можем да разгледаме всичките му възможности в един урок, но ще имаме достатъчно време да научим основите и да се научим да работим с него.
План на урока
1. Подготовка за урока.
2. Инсталиране на библиотеката PHPExcel.
3. Основни настройки за лист на работна книга на Excel.
Безплатен курс по програмиране на PHP
Овладейте курса и научете как да изградите динамичен PHP и MySQL уебсайт от нулата с помощта на MVC модела
4. Попълване на документа с данни.
5. Оформяне на данни.
Подробности за урока
Тема: PHP
Трудност: Средна
Урок: Видео (.mp4)
Час: 01:31:02
Размер на архива: 217 Mb
1. Подготовка за урока.
Първото нещо, от което се нуждаем, за да създадем ценова листа, са данните, които тя показва. За целта подготвих база данни (наречена цена), която съдържа само един етикет - продукт. Табелката съдържа няколко наименования на стоки, за показване в ценовата листа. Можете да вземете дъмпа му от изходния код на урока.
След това подготвих много прост скрипт, който изтегля данни от базата данни и по-точно от таблицата tovar и формира масив от тези данни. С този масив ние ще работим с вас.
Скриптът включва само три файла:
Ако желаете да използвате български символи за извеждане на данни във формат EXCEL, тогава всички файлове трябва да бъдат записани в UTF8 кодировка.
След това нека дадем кода и за трите файла. файл config.php:
Както можете да видите, тук всичко е елементарно. Току-що зададохме четири константи за съхраняване на настройките за връзка с базата данни. И всъщност ние се свързваме и избираме база данни за работа. След това задайте кодирането на заявката.
Следният файл functions.php:
В този файл ще продължим да извършваме цялото кодиране. Това е само подготовка. Както можете да видите, първо включвам файловете config.php и functions.php и извиквам функцията get_price(), за да получа масив от продукти.
Нека отпечатам този масив (с помощта на функцията print_r()):
Сега мисля, че разбирате какво се съдържа в масива $price_list. Сега нека да преминем към инсталирането на библиотеката PHPExcel.
2. Инсталиране на библиотеката PHPExcel.
Първата стъпка е да изтеглите библиотеката. За да направите това, отидете на официалния сайт на библиотеката - http://phpexcel.codeplex.com/ :
И щракнете върху бутона за изтегляне. В резултат на изтеглянето ще получим архива PHPExcel-1.7.7.zip. Нека го разопаковаме. Както можете да видите, след разопаковането получихме няколко файла и папки:
Файловете са различни описания за предишни версии, лицензионно споразумение и много кратко ръководство за инсталиране. Освен това папката Classes съдържа самата библиотека PHPExcel - тази папка трябва да бъде копирана в корена на нашия скрипт, което направих.
Папката Documentation съдържа документация за библиотеката, но е вярно, че е на английски. Но все пак препоръчвам да го прочетете. Тъй като библиотеката има огромна функционалност, разбира се, днес няма да я разгледаме цялата. И в документацията ще намерите много интересни неща.
Папката Тестове съдържа примери заизползване на библиотеката.
Така че, ако сте копирали папката Classes в корена на скрипта, тогава можем да продължим към по-нататъшна работа.
И така, нека отидем на файла index.php и да започнем да работим с него. Сега трябва да свържем основния файл на библиотеката PHPExcel.php (който се намира в папката Classes) към нашия скрипт и да създадем обект на клас PHPExcel:
За тези, които не знаят, класът е вид чертеж или описателен елемент на някакъв конкретен обект. Тоест, в нашия случай (с прости думи) класът PHPExcel.php описва всички методи (това са обикновени функции, описани само в класа) и свойства (променливи на класа), необходими за показване на данни във формат на Excel.
За да създадете клас обект, трябва да посочите променлива ($objPHPExcel), след това да поставите знак за присвояване, след това новата ключова дума и да посочите името на класа. Обектът е вид променлива, която ни позволява да работим с методите и свойствата на клас. Тоест, ако сме създали обект, тогава имаме достъп до всичко, което е описано в класа.
Това завършва инсталирането на библиотеката, можете да започнете да работите с нея.
3. Основни настройки за лист на работна книга на Excel.
Както знаете, документът на Excel се състои от работни книги, а всяка работна книга от своя страна е съставена от листове. След това листът се състои от набор от клетки, достъпни чрез координати. Тоест имаме колони, които имат имена на букви (A, B, C и т.н.) и има редове, които са номерирани. Това означава, че за да получите достъп до първата клетка, трябва да посочите код A1. По същия начин ще имаме достъп до всяка клетка с помощта на библиотеката.
И така, първата стъпка е да изберете активния лист, на който ще показваме данни и да получим обекта на този лист.
Използване на методаsetActiveSheetIndex(0) - задайте индекса (номера) на активния лист. Номерацията на листовете започва от нула. Освен това, използвайки метода getActiveSheet(), получаваме обекта на този активен лист, т.е., с други думи, получаваме достъп до него за работа. И запазваме този обект в променливата $active_sheet.
Ако искате да посочите друг лист като активен, първо трябва да го създадете, като използвате метода:
След това по аналогия посочваме индекса и получаваме обекта на активния лист.
Сега нека генерираме нашия първи документ в Excel (въпреки че, разбира се, той все още е празен), за да направите това, добавете следния код към файла index.php в края му (освен това, целият код, който ще дам, трябва да бъде вмъкнат преди този код – тоест кодът, който е по-долу, трябва да е най-отдолу на файла – това е краят на скрипта. ):
Безплатен курс по програмиране на PHP
Овладейте курса и научете как да създадете динамичен сайт в PHP и MySQL от нулата, като използвате модела MVC
В началото, обърнете внимание, изпращаме заглавки.
Първият е да посочите на браузъра типа съдържание, което се отваря - това е документ на Excel. И второто - посочваме на браузъра, че документът трябва да бъде даден на потребителя за изтегляне и веднага посочваме името на изтегления файл (‘simple.xls’).
След това документът трябва да бъде запазен. Първо трябва да уточним в коя версия го записваме. За да направите това, извикайте метода createWriter() на класа PHPExcel_IOFactory и му предайте обекта $objPHPExcel и посочете версията на Excel5. Това ще създаде обект от класа PHPExcel_Writer_Excel5 и ще извика метода save() върху него. Подаваме низа 'php://output' като параметър на този метод, което означава, че файлът няма да бъде запазен, а ще бъде предоставен на браузъра, а браузърът от своя страна ще ни го даде за изтегляне.
Сега малко за версиите. В допълнение към версията на Excel5 е налична и версията на Excel2007, но тъй като имам инсталиран MS Office 2003, версията на Excel2007 просто не ми се отваря. Така че създавам документ за версия на Excel5.
Сега да отидем в браузъра и да видим какво имаме:
Както можете да видите, получихме празен Excel документ с един активен лист.
Сега нека напишем останалите настройки на листа (обърнете внимание, че извикваме всички методи на обекта $active_sheet - обектът на активния лист на документа и вмъкваме целия код преди заглавките - функцията header ):
И така, първо задаваме ориентацията на листа с помощта на метода setOrientation(), на който предаваме константата ORIENTATION_PORTRAIT на класа PHPExcel_Worksheet_PageSetup. Тази константа означава, че ориентацията на страницата ще бъде портретна.
Ако искате да подредите листа като пейзажен лист, трябва да предадете константата Worksheet_PageSetup::ORIENTATION_LANDSCAPE към метода setOrientation().
Моля, обърнете внимание, че преди метода setOrientation() трябва да извикате метода getPageSetup() - който ще ни даде достъп до настройките на страницата (връща обекта на класа, който отговаря за настройките на страницата).
След това извикваме метода SetPaperSize(), който ви позволява да зададете размера на страницата за печат. Предаваме константата PAPERSIZE_A4 като параметър, класът е PHPExcel_Worksheet_PageSetup. Което означава, че размерът на листа на страницата ще бъде зададен на A4.
Това може да се провери, като отворите документ на Excel и отидете в менюто Файл, след това в Настройка на страницата.
След това задаваме полетата на документа, тоест отстъпите от краищата на документа. Отстъпите се задават в специални символни единици. Първо, обърнете внимание, ние се обаждаме$active_sheet обект, метод getPageMargins() (той ще върне обект от класа, който отговаря за задаването на полетата на страницата). След това извикваме метода setTop(1), който задава горното поле на страницата.
Освен това, по аналогия, методите setRight(0.75), setLeft(0.75), setBottom(1) задават съответно десния, левия и долния отстъп на документа.
След това нека използваме метода setTitle("Price List"), за да зададем заглавието на нашия лист.
След това, когато печатате (ако някой има нужда от това), можете да покажете горния и долния колонтитул на листа. Тази възможност може да бъде зададена чрез методите setOddHeader("&CHeader от нашата ценова листа") и setOddFooter('&L&B'.$active_sheet->getTitle().'&RPage &P from &N'), които задават съответно горния и долния колонтитул на документа.
Обърнете внимание на предадените параметри:
За заглавката - предаваме низа - &C Заглавката на нашата ценова листа (етикет &C - означава, че текстът трябва да е центриран).
За долния колонтитул предаваме низа - &L&B'.$active_sheet->getTitle().'&RPage &P от &N', това означава, че трябва да покажете с удебелен шрифт вляво (&L&B'), заглавието на листа (метод $active_sheet->getTitle()), след това вдясно (&R) покажете номера на страницата (P възраст &P) от общия брой страници (&N).
Пълен списък с етикети можете да намерите в документацията. Не ви давам този списък, защото е много голям и няма да имате нужда от много от тях.
След това задаваме настройките на шрифта по подразбиране. Това може да стане чрез последователно извикване на методи:
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial') - задаване на името на шрифта;
$objPHPExcel->getDefaultStyle()->getFont()->setSize(8); - задаване на размера на шрифта;
4. Пълнежданни за документи
Първо, нека зададем ширината на основните колони, от които се нуждаем: