Работа с XLSX через обновленную библиотеку (phpoffice/phpspreadsheet)

11.06.2018

Примеры работы с файлами эксель (excel) используя библиотеку phpspreadsheet.

Также по теме есть хорошая заметка 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');

Еще по теме:

Пара полезных рецептов.


Категории: PHP
Яндекс.Метрика