Вывод данных с Excel-файла (PhpSpreadsheet)

Подключение PhpSpreadsheet

Работать с файлом Excel можно через библиотеку PhpSpreadsheet (является следующей версией библиотеки «PHPExcel»). Данная библиотека понимает форматы «xlsx» и «xls».

Ссылка на библиотеку: github.com/PHPOffice/PhpSpreadsheet

Устанавливается PhpSpreadsheet через composer (установку composer можно прочитать на странице установка Yii).

composer require phpoffice/phpspreadsheet

Чтение данных с Excel

Код ниже выводит содержимое Excel-файла:

require 'vendor/autoload.php';
use \PhpOffice\PhpSpreadsheet\Shared\Date;

$file = 'path/to/file.xlsx'; // файл для получения данных
$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);; // подключить Excel-файл
$excel->setActiveSheetIndex(0); // получить данные из указанного листа

$sheet = $excel->getActiveSheet();

// формирование html-кода с данными
$html = '<table>';
foreach ($sheet->getRowIterator() as $row) {
    $html .= '<tr>';
    $cellIterator = $row->getCellIterator();
    foreach ($cellIterator as $cell) {

        // значение текущей ячейки
        $value = $cell->getCalculatedValue();

        // если дата, то преобразовать в формат PHP
        if (Date::isDateTime($cell)) {
            $value = date('d.m.Y', Date::excelToTimestamp($cell->getValue()));
        }

        $html .= '<td>'.$value.'</td>';
    }
    $html .= '<tr>';
}
$html .= '</table>';

// вывод данных
echo $html;

Стоит обратить внимание на метод Date::excelToTimestamp().

Excel хранит дату как число дней, прошедшего с 1 января 1900 года. А PHP хранит дату как число секунд, прошедшего с 1 января 1970. Для преобразование формат даты из Excel в PHP используется функция Date::excelToTimestamp().

Вывод значения из указанной ячейки в Excel

Если надо вывести значение только указанной ячейки, то можно использовать метод getCell() или getCellByColumnAndRow().

# настройки как на примере выше
$sheet = $excel->getActiveSheet();

# Получить значение из ячейки
$cell = $sheet->getCell('A1'); // 1-ый способ
$cell = $sheet->getCellByColumnAndRow(0, 1); // 2-ой способ

# Вывод значения
echo $cell->getValue();