- Формирование Excel-документов средствами PHP
- Введение
- Синтаксис
- Заключение
- How to Create and Edit Excel Spreadsheets in PHP
- Code:
- Stop Wasting Time on Servers
- Alternate Approach:
- How To Edit an Existing Spreadsheet in PHP?
- How To Prepare Spreadsheets for Printing?
- Host PHP Websites with Ease [Starts at $10 Credit]
- Conclusion
- Share This Article
- “Cloudways hosting has one of the best customer service and hosting speed”
Формирование Excel-документов средствами PHP
Возможность создания Excel-документов в общих чертах уже была описана на Хабре, но полной информации из этих статей мне получить не удалось. Пришлось заняться собственными изысканиями, результатами которых я хотел бы с Вами поделиться. Данная статья будет полезна и новичкам, и профессионалам, столкнувшимся с проблемой динамического формирования Excel-документов.
Это всего лишь первая часть серии статей, которыми хотелось бы поделиться с общественностью. В последующих статьях будут более подробно рассмотрены некоторые способы и нюансы выгрузки xls-файлов.
Введение
Не хочу распространяться на тему того, зачем необходима выгрузка в Excel. Мне кажется, что это вполне очевидно: в формате MS Excel достаточно удобно предоставлять пользователю загружаемые данные. Это могут быть прайс-листы, каталоги или любая подобная служебная, статистическая и иного рода информация.
Сразу хочу оговориться, что в статье рассматривается работа с документами через COM-объекты. Данный метод таботает только на Windows-платформах. Другими словами, если Вы предпочитаете *nix-хостинг, этот метод Вам не подходит.
Синтаксис
Создание COM-объекта осуществляется следующим образом:
$my_com_object = new COM($object_class);
, где
$my_com_object — новый COM-объект;
$object_class — id-класс требуемого объекта.
Для создания Excel-документов переменной $object_class необходимо задать значение «Excel.Application» либо «Excel.sheet».
$xls = new COM(«Excel.Application»);
После создания нового COM-объекта, можно обращаться к его свойствам и методам:
$xls = new COM(«Excel.Application»); // Создание объекта
$xls->Application->Visible = 1; // Делаем объект видимым
$xls->Workbooks->Add(); // Добавляем новую книгу (создаём документ)
$rangeValue = $xls->Range(«A1»);
$rangeValue->Value = «Декорация текста: жирный, подчеркнутый, наклонный»;
$rangeValue = $xls->Range(«A2»);
$rangeValue->Value = «Размер шрифта: 14»;
$rangeValue = $xls->Range(«A3»);
$rangeValue->Value = «Тип шрифта: Arial»;
$range=$xls->Range(«A1:J10»); // Указываем область ячеек
$range->Select(); // Выделяем эту область
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область
// Отформатируем текст в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = «Arial»; // Тип шрифта
$fontRange->Font->Size = 14; // Размер шрифта
?>
Открытие, запись, закрытие документа
Общие возможности
- создать новый документ
- открыть ранее созданный документ
- сохранить открытый документ
- закрыть документ
Создание нового документа
- создаем «связь» между PHP и Excel (создается дескриптор, как при работе с файлами)
- указываем, будет ли визуально открыта программа или нет
- указываем программе через дескриптор, что нужно открыть новый документ
Открытие ранее созданного документа
Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Open(«C:\my_doc.xls»); // Открываем ранее сохраненный документ
?>
Внимание! Если указать не полный, а относительный путь, то поиск открываемого файла будет происходить не на сервере, а на компьютере пользователя. По умолчанию это папка «Мои документы».
Сохранение открытого документа
Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks():
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Проба записи»; // Вставляем значение
// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);
$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Хочу отдельно отметить, что высвобождение объектов — это очень хорошо и правильно. Да сгорят в священном очищающем пламени костров Инквизиции те, кто считает иначе.
Закрытие документа
Закрытие документа производится методом Quit().
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Что-то записываем»; // Вставляем значение в ячейку
// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);
$xls->Quit(); // Закрываем приложение
$xls->Release(); // Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Заключение
Если статья оказалась Вам полезна и интересна, буду рад подготовить продолжение, где более подробно будут рассматриваться методы работы с листами документов, ячейками и границами.
Разумеется, если это кому-то интересно и необходимо для работы.
How to Create and Edit Excel Spreadsheets in PHP
PHP is highly enriched with features of a good scripting language. It provides numerous libraries for specific purposes. PHP provides a library to deal with Excel files. It is called PHP Excel library. It enables you to read and write spreadsheets in various formats including csv, xls, ods, and xlsx. You will need to ensure that you have PHP’s upgraded version not older than PHP 5.2 . Moreover, you should have installed extensions php_qd2, php_xml and php_zip.
Spreadsheet creation is a very common use case in PHP development. It is used to export data to an Excel spreadsheet. Below is the code for creating an excel spreadsheet using the PHP Excel library.
Code:
//Including PHPExcel library and creation of its object require('PHPExcel.php'); $phpExcel = new PHPExcel; // Setting font to Arial Black $phpExcel->getDefaultStyle()->getFont()->setName('Arial Black'); // Setting font size to 14 $phpExcel->getDefaultStyle()->getFont()->setSize(14); //Setting description, creator and title $phpExcel ->getProperties()->setTitle("Vendor list"); $phpExcel ->getProperties()->setCreator("Robert"); $phpExcel ->getProperties()->setDescription("Excel SpreadSheet in PHP"); // Creating PHPExcel spreadsheet writer object // We will create xlsx file (Excel 2007 and above) $writer = PHPExcel_IOFactory::createWriter($phpExcel, "Excel2007"); // When creating the writer object, the first sheet is also created // We will get the already created sheet $sheet = $phpExcel ->getActiveSheet(); // Setting title of the sheet $sheet->setTitle('My product list'); // Creating spreadsheet header $sheet ->getCell('A1')->setValue('Vendor'); $sheet ->getCell('B1')->setValue('Amount'); $sheet ->getCell('C1')->setValue('Cost'); // Making headers text bold and larger $sheet->getStyle('A1:D1')->getFont()->setBold(true)->setSize(14); // Insert product data // Autosize the columns $sheet->getColumnDimension('A')->setAutoSize(true); $sheet->getColumnDimension('B')->setAutoSize(true); $sheet->getColumnDimension('C')->setAutoSize(true); // Save the spreadsheet $writer->save('products.xlsx');
Stop Wasting Time on Servers
Cloudways handle server management for you so you can focus on creating great apps and keeping your clients happy.
Alternate Approach:
Alternatively, spreadsheet can be downloaded rather than saving it to the server. You may use the following code:
header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="file.xlsx"'); header('Cache-Control: max-age=0'); $writer->save('php://output');
How To Edit an Existing Spreadsheet in PHP?
The editing process is rather similar to the spreadsheet creation process. Use the following code to do this:
// Include PHPExcel library and create its object require('PHPExcel.php'); // Load an existing spreadsheet $phpExcel = PHPExcel_IOFactory::load('products.xlsx'); // Get the first sheet $sheet = $phpExcel ->getActiveSheet(); // Remove 2 rows starting from the row 2 $sheet ->removeRow(2,2); // Insert one new row before row 2 $sheet->insertNewRowBefore(2, 1); // Create the PHPExcel spreadsheet writer object // We will create xlsx file (Excel 2007 and above) $writer = PHPExcel_IOFactory::createWriter($phpExcel, "Excel2007"); // Save the spreadsheet $writer->save('products.xlsx');
How To Prepare Spreadsheets for Printing?
To get a spreadsheet ready, you should set size, margins and paper orientation.
$sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $sheet -> getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); $sheet->getPageMargins()->setTop(1); $sheet ->getPageMargins()->setRight(0.75); $sheet ->getPageMargins()->setLeft(0.75); $sheet ->getPageMargins()->setBottom(1);
Host PHP Websites with Ease [Starts at $10 Credit]
Conclusion
The PHPExcel library is very useful for calculations and charts. It is often used to store data in Excel sheets or to import data from Excel spreadsheets via PHP website. Got any questions about what we discussed? Leave a comment and I’ll get back to you!
Apart from knowing tricks such as working on spreadsheets in PHP, any smart PHP developer knows the importance of an excellent hosting solution for the web apps he/she creates. The Cloudways Managed PHP Hosting Platform gives you ultra-fast performance thanks to its optimized hosting stack. Launch your free trial today to venture into the future of PHP hosting.
Share This Article
Customer Review at
“Cloudways hosting has one of the best customer service and hosting speed”
Sanjit C [Website Developer]