Экспорт в excel из Laravel

Для экспорта в excel из Laravel будем использовать пакет maatwebsite/excel , который использует для своей работы PHPExcel.

Подключение пакета

Для установки пакета maatwebsite/excel необходимо запустить команду:

composer require maatwebsite/excel

Затем открываем файл app/config/app.php, находим в нем  массив 'providers'  и добавляем туда новый сервис-провайдер:

'Maatwebsite\Excel\ExcelServiceProvider',

В этом же файле есть массив 'aliases' - в нем хранятся псевдонимы для фасадов. Добавим в этот массив псевдоним для фасада Excel:

'Excel' => 'Maatwebsite\Excel\Facades\Excel',

Далее необходимо обновить конфигурацию Laravel с помощью команды:

php artisan vendor:publish

Теперь, прописав в контроллере  use Excel; мы можем использовать фасад Excel для своих целей.

Создание экспортируемого файла

Для создания файла используется метод:

Excel::create('Filename');

Чтобы изменить файл по нашему усмотрению - используем функцию-замыкание:

Excel::create('Filename', function($excel) {

    // Call writer methods here

});

Изменение свойств документа:

Excel::create('Filename', function($excel) {

    // Set the title
    $excel->setTitle('Our new awesome title');

    // Chain the setters
    $excel->setCreator('Maatwebsite')
          ->setCompany('Maatwebsite');

    // Call them separately
    $excel->setDescription('A demonstration to change the file properties');

});

Загрузка файла

Для загрузки созданного файла используем ->export('формат_файла') или ->download('формат_файла') :


Excel::create('Filename', function($excel) {

})->export('xls');

// or
->download('xls');

Создание листов

Для создания листа внутри созданного файла используется ->sheet('Название_листа'):

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        // Sheet manipulation

    });

})->export('xls');

Создание нескольких листов:

Excel::create('Filename', function($excel) {

    // первый лист
    $excel->sheet('First sheet', function($sheet) {

    });

    // второй лист
    $excel->sheet('Second sheet', function($sheet) {

    });

})->export('xls');

Изменение свойств листа

Все настройки хранятся в файле app/config/packages/maatwebsite/excel/config.php

Изменение ориентации листа:

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        $sheet->setOrientation('landscape');

    });

})->export('xls');

Для изменения отступов нужно использовать  ->setPageMargin():

// Установить верхний, правый, нижний, левый отступ
 $sheet->setPageMargin(array(0.25, 0.30, 0.25, 0.30));
// установить все поля
 $sheet->setPageMargin(0.25);

Стилизация листа

Для изменения стиля всего листа используем метод ->setStyle():

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        // Изменение стиля шрифта
     $sheet->setStyle(array(
         'font' => array(
             'name'      =>  'Calibri',
             'size'      =>  15,
             'bold'      =>  true
         )
     ));

    });

})->export('xls');

Для изменения шрифта используем ->setFont($array):

$sheet->setFont(array(
    'family'     => 'Calibri',
    'size'       => '15',
    'bold'       => true
));

Изменение границ листа:

// Sets all borders
$sheet->setAllBorders('thin');

// Set border for cells
$sheet->setBorder('A1', 'thin');

// Set border for range
$sheet->setBorder('A1:F10', 'thin');

Ширина столбцов:

// Ширина одного столбца
$sheet->setWidth('A', 5);

// Установка ширины для нескольких столбцов
$sheet->setWidth(array(
    'A'     =>  5,
    'B'     =>  10
));

Высота строк:

// Set height for a single row
$sheet->setHeight(1, 50);

// Set height for multiple rows
$sheet->setHeight(array(
    1     =>  50,
    2     =>  25
));

Для установки размера ячеек используем метод ->setSize($cell, $width, $height):

// Устанавливаем размер одной ячейки
$sheet->setSize('A1', 500, 50);

$sheet->setSize(array(
    'A1' => array(
        'width'     => 50
        'height'    => 500,
    )
));

Работа со строками

Вставка значений в ячейки строки:

// первая строка
$sheet->row(1, array(
     'test1', 'test2'
));

// вторая строка
$sheet->row(2, array(
    'test3', 'test4'
));

Изменение стиля ячеек для строки:

// Установка черного цвета
$sheet->row(1, function($row) {

    // вызов метода 
    $row->setBackground('#000000');

});

Добавление строки:

// добавление строки после 2 строки
$sheet->appendRow(2, array(
    'appended', 'appended'
));

//добавление строки после последней
$sheet->appendRow(array(
    'appended', 'appended'
));

Добавление строки перед строкой:

// добавление перед первой строкой
$sheet->prependRow(1, array(
    'prepended', 'prepended'
));

// добавление первой строки
$sheet->prependRow(array(
    'prepended', 'prepended'
));

Добавление сразу нескольких строк:

// Добавление нескольких строк
$sheet->rows(array(
    array('test1', 'test2'),
    array('test3', 'test4')
));

// Добавление нескольких строк
$sheet->rows(array(
    array('test5', 'test6'),
    array('test7', 'test8')
));

Работа с ячейками

$sheet->cell('A1', function($cell) {

    // изменение ячейки A1

});

$sheet->cells('A1:A5', function($cells) {

    // изменение диапазона ячеек

});

Установка цвета фона ячеек:

// Set black background
$cells->setBackground('#000000');

Изменение шрифта внутри ячеек:

// Set with font color
$cells->setFontColor('#ffffff');

// Set font family
$cells->setFontFamily('Calibri');

// Set font size
$cells->setFontSize(16);

// Set font weight to bold
$cells->setFontWeight('bold');

// Set font
$cells->setFont(array(
    'family'     => 'Calibri',
    'size'       => '16',
    'bold'       =>  true
));

Установка границ ячеек:

// Set all borders (top, right, bottom, left)
$cells->setBorder('solid', 'none', 'none', 'solid');

// Set borders with array
$cells->setBorder(array(
    'borders' => array(
        'top'   => array(
            'style' => 'solid'
        ),
    )
));

Горизонтальное выравнивание:

// Выравнивание по центру
$cells->setAlignment('center');

Вертикальное выравнивание:

// вертикальное выравнивание по центру
 $cells->setValignment('center');

Использование нативных методов PHPExcel

Есть возможность вызывать нативные методы  PHPExcel для объектов $excel и $sheet:

// Установка стилей по умолчанию
$excel->getDefaultStyle();
// Защита ячеек
$sheet->protectCells('A1', $password);

Обновлено: 19.06.2017

Вам помогла эта статья? Оцените!
(24 оценок, среднее: 4,29 из 5)
Загрузка...