Встроенные библиотеки PHP не позволяют работать с форматами данных популярного табличного процессора Excel. За исключением текстового формата CSV (см. функции str_getcsv(), fputcsv()).
Решение этой задачи можно найти в рамках проекта
PHPExcel.
Как известно, табличных форматов много. Библиотека поддерживает работу со многими экселевскими типами файлов и не только. Вот список поддерживаемых форматов:
- Excel5,
- Excel2003XML,
- Excel2007,
- OOCalc (Open Document Format),
- SYLK (Microsoft Multiplan Symbolic Link),
- Gnumeric,
- CSV.
Работать с библиотекой очень просто, она бесплатна, открыта для использования и требует только PHP. Это позволяет обрабатывать табличные файлы (в том числе создавать и изменять) под любой операционной системой.
Загрузка XLS файла
В составе библиотеки находятся классы для работы со всеми из перечисленных типов, но наиболее популярен универсальный подход инициализации объекта через фабрику, которая сама определяет формат данных и создаёт объект нужного типа.
1 2 3 4 |
$inputFileName = './sampleData/example1.xls'; /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); |
Дальше вы можете обратиться к определенной странице документа, нужной ячейке.
1 2 3 4 |
//выбрать первую страницу, показать значение ячейки 'D5' $objPHPExcel->getSheet(0); $AC = $objPHPExcel->getActiveSheet(); echo $AC->getCell('D5')->getValue(); |
Создание, выгрузка XLS файла
Алгоритм действий следующий. После создания и работы с таблицей, используется фабрика объектов выгрузки:
1 |
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); |
где определяется формат файла.
В качестве пункта назначения можно указать файл или консоль, если выгрузить требуется сразу пользователю в браузер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php //здесь мы создаём таблицу $objPHPExcel и наполняем её данными //или правим существующий файл ... //выводим файл для скачки пользователем //формируем заголовки header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="myfile.xls"'); header('Cache-Control: max-age=0'); //инициализируем объект через ферму для записи, //к примеру, в формате Excel5 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //выводим XLS $objWriter->save('php://output'); ?> |