Примеры работы с файлами эксель (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');
Еще по теме:
Пара полезных рецептов.