Примеры работы с файлами эксель (excel) используя библиотеку phpspreadsheet
Работа с XLSX через обновленную библиотеку (phpoffice/phpspreadsheet)
11.06.2018 21:59:37
Общее
Примеры работы со строй версией библиотеки: Работа с XLSX ("новый" Эксель)
Страница самого проекта на packagist: phpoffice/phpspreadsheet
Важно: требуется PHP 5.6 и выше.
Установка
Для начала нужно устанавливать composer
Затем проинструктировать пакет через консоль:
composer require phpoffice/phpspreadsheet
Хороший набор примеров присутствует в директории /vendor/phpoffice/phpspreadsheet/samples/Basic/
Документация по API
Примеры:
Создание и запись в файл
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');
Чтение данных
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(); //$oReader = IOFactory::createReaderForFile($sFile); // Если вы хотите установить строки и столбцы, которые необходимо читать, создайте класс 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++) { $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();