- 2 Steps To Create Excel Spreadsheet In PHP (Simple Examples)
- TLDR – QUICK SLIDES
- TABLE OF CONTENTS
- CREATING XLSX SPREADSHEETS IN PHP
- STEP 1) DOWNLOAD PHPSPREADSHEET
- STEP 2) PHP SIMPLE SPREADSHEET
- EXTRA) ARRAY TO SPREADSHEET
- ALTERNATIVE) CSV FILES
- DOWNLOAD & NOTES
- SUPPORT
- EXAMPLE CODE DOWNLOAD
- EXTRA BITS & LINKS
- LINKS & REFERENCES
- TUTORIAL VIDEO
- INFOGRAPHIC CHEAT SHEET
- THE END
- Самый простой способ генерации xls в PHP
- Создание Excel документа на PHP (генерация .xls файлов)
- Для вас это может быть интересно:
- Создание Excel документа на PHP (генерация .xls файлов) : 7 комментариев
2 Steps To Create Excel Spreadsheet In PHP (Simple Examples)
Welcome to a quick tutorial and example on how to create Excel spreadsheets with PHP. Need to generate a report in an Excel Spreadsheet? Yes, we can actually do that quite easily.
In order to generate Excel files in PHP, we need to use a third-party library. PHPSpreadsheet is a good recommendation, and the easy way to get it is to use Composer – composer require phpoffice/phpspreadsheet . Thereafter, a code snippet to generate an Excel Spreadsheet:
- require «vendor/autoload.php»;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $sheet->setCellValue(«A1», «Hello World!»);
- $writer = new Xlsx($spreadsheet);
- $writer->save(«demo.xlsx»);
That covers the essentials, but let us walk through a few more examples in this guide – Read on!
TLDR – QUICK SLIDES
TABLE OF CONTENTS
CREATING XLSX SPREADSHEETS IN PHP
All right, let us now get into the example of creating an Excel spreadsheet in PHP.
STEP 1) DOWNLOAD PHPSPREADSHEET
- PHP cannot generate Excel files natively, we need to use a third-party library called PHPSpreadsheet.
- One of the easier ways to get PHPSpreadsheet is to use a package manager called Composer. A hassle to download and install that, but it’s a one-time effort… Plus, Composer does offer a ton of other packages.
- Once Composer is installed – Fire up the command line, navigate to your project folder, and run composer require phpoffice/phpspreadsheet . Composer will automatically download the latest version into the vendor/ folder.
- Check out the Official PHPSpreadsheet documentation for more.
STEP 2) PHP SIMPLE SPREADSHEET
getActiveSheet(); $sheet->setTitle("Basic"); $sheet->setCellValue("A1", "Hello World!"); $sheet->setCellValue("A2", "Goodbye World!"); // (D) ADD NEW WORKSHEET + YOU CAN ALSO USE FORMULAS! $spreadsheet->createSheet(); $sheet = $spreadsheet->getSheet(1); $sheet->setTitle("Formula"); $sheet->setCellValue("A1", "5"); $sheet->setCellValue("A2", "6"); $sheet->setCellValue("A3", "=SUM(A1:A2)"); // (E) OUTPUT $writer = new Xlsx($spreadsheet); // (E1) SAVE TO A FILE ON THE SERVER $writer->save("demoA.xlsx"); echo "OK!"; /* (E2) OR FORCE DOWNLOAD header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header("Content-Disposition: attachment;filename=\"demoA.xlsx\""); header("Cache-Control: max-age=0"); header("Expires: Fri, 11 Nov 2011 11:11:11 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: cache, must-revalidate"); header("Pragma: public"); $writer->save("php://output"); */
- (A) Load and use the PHPSpreadsheet library.
- (B) Create a new spreadsheet.
- (C & D) Add your worksheets and populate the cells.
- (E) Save or output the spreadsheet.
EXTRA) ARRAY TO SPREADSHEET
getActiveSheet(); $sheet->setTitle("Arr"); // (D) DATA ARRAY TO WORKSHEET $data = [ ["Name", "Email", "Tel"], ["Jon Doe", "jon@doe.com", "123456"], ["Joe Doe", "joe@doe.com", "234567"], ["Joy Doe", "joy@doe.com", "345678"], ]; $cRow = 0; $cCol = 0; foreach ($data as $row) < $cRow ++; // NEXT ROW $cCol = 65; // RESET COLUMN "A" foreach ($row as $cell) < $sheet->setCellValue(chr($cCol) . $cRow, $cell); $cCol++; > > // (E) OUTPUT $writer = new Xlsx($spreadsheet); $writer->save("demoB.xlsx"); echo "OK!";
As for writing an array to a Spreadsheet, this is really subjective to how the array is formatted. This is just a quick example of how a 2-dimension array can be “converted” into an Excel Spreadsheet.
ALTERNATIVE) CSV FILES
- fopen(FILE, MODE) to create a new CSV file.
- fputcsv(FILE, LINE) to put a line into the CSV file. Take note of that LINE is an array.
- fclose(FILE) to properly close and write the CSV file.
But of course, CSV is pure data – No formulas, no setting of cell colors, no column dimensions, and all the funky stuff.
DOWNLOAD & NOTES
Here is the download link to the example code, so you don’t have to copy-paste everything.
SUPPORT
600+ free tutorials & projects on Code Boxx and still growing. I insist on not turning Code Boxx into a «paid scripts and courses» business, so every little bit of support helps.
EXAMPLE CODE DOWNLOAD
Click here for the source code on GitHub gist, just click on “download zip” or do a git clone. I have released it under the MIT license, so feel free to build on top of it or use it in your own project.
EXTRA BITS & LINKS
Finally, here are some small extras that may be useful to you.
LINKS & REFERENCES
- Here is a massive list of commonly used Excel formula that you might find useful.
- Display Excel As HTML In PHP – Code Boxx
- PHPSpreadsheet Quickstart Tutorial – Code Boxx
- Export Data From MYSQL To Excel In PHP – Code Boxx
TUTORIAL VIDEO
INFOGRAPHIC CHEAT SHEET
THE END
Thank you for reading, and we have come to the end of this short tutorial. I hope this has helped you to create Excel files in PHP for your project, and if you have anything to share with this guide, please feel free to comment below. Good luck and happy coding!
Самый простой способ генерации xls в PHP
Вообще казалось бы вынесенная в заголовок задача не должно быть сложной, да и гугл дает кучу ссылок, в том числе на хабр, однако для того чтобы сделать выгрузку БД с сайта в эксель мне пришлось несколько помучаться.
С модулем Spreadsheet_Excel_Writer я предпочел не связываться, по причине отсутствия необходимых ему модулей php на трех имеющихся у меня в наличии для тестирования серверах, хочется все-таки сделать код перетаскиваемый между серверами легко и просто.
php_write_excel оттолкнул полным отсутствием документации при необходимости сделать работу быстро (хотя в дальнейшем я хочу с этим модулем поразбираться).
В итоге я выбрал самый простейший способ из найденных в интернете — выведение стандартной html таблицы под видом xls-файла. На этом пути лично у меня возникла проблема с кодировкой, эксель упорно не хотел видеть кириллицу в честном Windows-1251. В итоге рабочей оказалась следующая конструкция.
header('Content-Type: text/html; charset=windows-1251'); header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); header('Content-transfer-encoding: binary'); header('Content-Disposition: attachment; filename=list.xls'); header('Content-Type: application/x-unknown'); echo htmlentities(iconv("utf-8", "windows-1251", $val),ENT_QUOTES, "cp1251")); HTML;
Соответственно iconv нужен в случае если данные в БД пишутся в utf-8, htmlentities переводит в доступный экселю формат. Попытка применить htmlentities к тексту в utf-8 привела к очень большому количеству китайских иероглифов в экселе.
Этот способ позволяет с помощью стандартных же html тэгов задавать жирный и курсивный текст, но пока не удалось понять, можно ли сделать заливку ячеек цветом. Впрочем для генерации простенького .xls файла способ все равно вполне пригоден. Данные потом нормально просматриваются, редактируются и сохраняются в экселе.
Надеюсь этот пост кому-нибудь поможет в решении аналогичной задачи.
Создание Excel документа на PHP (генерация .xls файлов)
Привет! Однажды у меня возникала задача по генерации отчетов в Excel на backend’е, которую я решил и теперь могу поделиться одним из способов создания документов Excel и добавлением в них данных средствами PHP.
Существует несколько библиотек для работы с xls файлами на PHP, но мы рассмотрим PHPExcel, попробуем создать файл xls, наполнить его данными и немного оформить стиль, то есть разберемся с базовым функционалом, которого будет достаточно для выполнения многих задач связанных с генерацией документов Excel на PHP. Однако, библиотека позволяет делать многое, в том числе работать с формулами, применять различные стили оформления, работать с листами.
Код скрипта, который вы увидите по ходу прочтения статьи, доступен на github.
Библиотека PHPExcel доступна в Composer как PHPOffice/PHPExcel. Я инициализирую в пустом каталоге composer и добавлю в зависимости PHPOffice/PHPExcel.
$ composer init $ composer require PHPOffice/PHPExcel
После создам файл generator.php и в нем подключу автозагрузку библиотек Composer’а.
Теперь можно приступить к работе, используя библиотеку PHPExcel.
Давайте создадим пустой документ со списком котов «CatList».
$document = new \PHPExcel(); $objWriter = \PHPExcel_IOFactory::createWriter($document, 'Excel5'); $objWriter->save("CatList.xls");
Мы создали экземпляр класса PHPExcell и создали объект, используя фабрику, который занимается сохранением документов. Кстати, вторым аргументом метода createWriter можно передавать значение «PDF» и таким образом генерировать PDF файлы средствами PHP.
После запуска скрипта в директории появился файл CatList.xls, его можно открыть в Excel и убедиться, что он пустой и программа его открывает без ошибок.
Заполнение Excel документа данными
Давайте попробуем засунуть в файл список котов, создав три столбца с порядковым номером, именем и цветом шерстки. Сперва нам нужны исходные данные, их мы создадим вручную в виде массива
$catList = [ ['name' => 'Tom', 'color' => 'red'], ['name' => 'Bars', 'color' => 'white'], ['name' => 'Jane', 'color' => 'Yellow'], ];
Наша табличка будет иметь заголовок, вписанный в три объединенные клетки. При этом мы сделаем возможность выбора координат для отрисовки таблички.
$document = new \PHPExcel(); $sheet = $document->setActiveSheetIndex(0); // Выбираем первый лист в документе $columnPosition = 0; // Начальная координата x $startLine = 2; // Начальная координата y // Вставляем заголовок в "A2" $sheet->setCellValueByColumnAndRow($columnPosition, $startLine, 'Our cats'); // Выравниваем по центру $sheet->getStyleByColumnAndRow($columnPosition, $startLine)->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Объединяем ячейки "A2:C2" $document->getActiveSheet()->mergeCellsByColumnAndRow($columnPosition, $startLine, $columnPosition+2, $startLine); // Перекидываем указатель на следующую строку $startLine++;
На выходе получаем документ с заголовком, вставленным в объединенную ячейку по центру. Перейдем к отрисовке шапки.
// Массив с названиями столбцов $columns = ['№', 'Name', 'Color']; // Указатель на первый столбец $currentColumn = $columnPosition; // Формируем шапку foreach ($columns as $column) < // Красим ячейку $sheet->getStyleByColumnAndRow($currentColumn, $startLine) ->getFill() ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB('4dbf62'); $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $column); // Смещаемся вправо $currentColumn++; >
Перейдем к заполнению данными из списка наших котов.
// Формируем список foreach ($catList as $key=>$catItem) < // Перекидываем указатель на следующую строку $startLine++; // Указатель на первый столбец $currentColumn = $columnPosition; // Вставляем порядковый номер $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $key+1); // Ставляем информацию об имени и цвете foreach ($catItem as $value) < $currentColumn++; $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $value); > >
Теперь, открыв отчёт, можно убедиться, что он сформирован как нужно.
'Tom', 'color' => 'red'], ['name' => 'Bars', 'color' => 'white'], ['name' => 'Jane', 'color' => 'Yellow'], ]; $document = new \PHPExcel(); $sheet = $document->setActiveSheetIndex(0); // Выбираем первый лист в документе $columnPosition = 0; // Начальная координата x $startLine = 2; // Начальная координата y // Вставляем заголовок в "A2" $sheet->setCellValueByColumnAndRow($columnPosition, $startLine, 'Our cats'); // Выравниваем по центру $sheet->getStyleByColumnAndRow($columnPosition, $startLine)->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Объединяем ячейки "A2:C2" $document->getActiveSheet()->mergeCellsByColumnAndRow($columnPosition, $startLine, $columnPosition+2, $startLine); // Перекидываем указатель на следующую строку $startLine++; // Массив с названиями столбцов $columns = ['№', 'Name', 'Color']; // Указатель на первый столбец $currentColumn = $columnPosition; // Формируем шапку foreach ($columns as $column) < // Красим ячейку $sheet->getStyleByColumnAndRow($currentColumn, $startLine) ->getFill() ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB('4dbf62'); $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $column); // Смещаемся вправо $currentColumn++; > // Формируем список foreach ($catList as $key=>$catItem) < // Перекидываем указатель на следующую строку $startLine++; // Указатель на первый столбец $currentColumn = $columnPosition; // Вставляем порядковый номер $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $key+1); // Ставляем информацию об имени и цвете foreach ($catItem as $value) < $currentColumn++; $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $value); > > $objWriter = \PHPExcel_IOFactory::createWriter($document, 'Excel5'); $objWriter->save("CatList.xls");