Примеры работы с файлами эксель (excel) используя библиотеку phpspreadsheet.
Работа с XLSX через обновленную библиотеку (phpoffice/phpspreadsheet)
11.06.2018
Также по теме есть хорошая заметка Php скрипт для конвертации XLSX в JSON
Общее
Примеры работы со старой версией библиотеки: Работа с XLSX ("новый" Эксель)
Страница самого проекта на packagist: phpoffice/phpspreadsheet
Важно: требуется PHP 5.6 и выше.
Установка
Для начала нужно устанавливать composer
Затем проинструктировать пакет через консоль:
composer require phpoffice/phpspreadsheet
Хороший набор примеров присутствует в директории /vendor/phpoffice/phpspreadsheet/samples/Basic/
Документация по API
Полезное:
-
Просто прочитать данные: $id = $oCells->get('A'.$iRow)->getValue();
-
Получение даты из соответствующей ячейки:
$date = $oCells->get('A'.$iRow)->getValue(); $date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($date); $date = date('d.m.Y', $date);
-
Получение данных ссылки:
$sLink = $oCells->get('B'.$iRow)->getHyperlink()->getUrl(); $sName = $oCells->get('B'.$iRow)->getHyperlink()->getTooltip();
Примеры:
Чтение данных:
Read.php (Download)
<?php error_reporting(E_ALL); ini_set('display_errors', 'On'); require_once('vendor/autoload.php'); //--use PhpOffice\PhpSpreadsheet\Reader\Xlsx; use PhpOffice\PhpSpreadsheet\IOFactory; $sFile = 'in.xlsx'; //--$oReader = new Xlsx(); $oSpreadsheet = IOFactory::load($sNewFile); // Вариант и для xls и xlsX // Если вы хотите установить строки и столбцы, которые необходимо читать, создайте класс ReadFilter //$oReader->setReadFilter( new MyReadFilter(11, 1000, range('B', 'O')) ); $oSpreadsheet = $oReader->load($sFile); $oCells = $oSpreadsheet->getActiveSheet()->getCellCollection(); for ($iRow = 1; $iRow <= $oCells->getHighestRow(); $iRow++) { //for ($iCol = 'A'; $iCol <= 'C'; $iCol++) for ($iCol = 'A'; $iCol <= $oCells->getHighestColumn(); $iCol++) { $oCell = $oCells->get($iCol.$iRow); if($oCell) { echo $oCell->getValue() . '<br />'; } } echo '<hr />'; }
Ошибки:
Сообщение Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in возникает, если попробовать открыть XLS файл, через new xlsX();
Создание и запись в файл:
Create_and_Write.php (Download)
<?php error_reporting(E_ALL); ini_set('display_errors', 'On'); require_once('vendor/autoload.php'); //use PhpOffice\PhpSpreadsheet\Helper\Sample; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; $sOutFile = 'out.xlsx'; $oSpreadsheet_Out = new Spreadsheet(); $oSpreadsheet_Out->getProperties()->setCreator('Maarten Balliauw') ->setLastModifiedBy('Maarten Balliauw') ->setTitle('Office 2007 XLSX Test Document') ->setSubject('Office 2007 XLSX Test Document') ->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.') ->setKeywords('office 2007 openxml php') ->setCategory('Test result file') ; // Add some data $oSpreadsheet_Out->setActiveSheetIndex(0) ->setCellValue('A1', 'Привет 123') ->setCellValue('B2', 'world!') ->setCellValue('C1', 'Hello') ->setCellValue('D2', 'world!') ; $oWriter = IOFactory::createWriter($oSpreadsheet_Out, 'Xlsx'); $oWriter->save($sOutFile); //$oWriter->save('php://output');
Еще по теме:
Пара полезных рецептов.