<MyRusakov.ru />

Финансовая грамотность от А до Я

Финансовая грамотность от А до Я

Данный курс в кратчайшие сроки обучит Вас финансовой грамотности. Эти знания позволят Вам получить, как минимум, серьёзную финансовую стабильность, а, как максимум, финансовую независимость.

В рамках курса даётся большое количество практических заданий, благодаря которым Вы не просто посмотрите курс, а действительно выполните ряд важнейших шагов, о которых в нём говорится.

Помимо самого курса Вас ждёт ещё бесплатный ценный Бонус: «Ранний выход на пенсию». В рамках этого Бонуса Вы узнаете, какой должен быть капитал конкретно в Вашем случае, варианты его получения, а также какие есть стратегии вывода капитала на пенсии и где их можно протестировать.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Экспортирование отчетов из базы данных в Excel с помощью библиотеки PhpOffice/PhpSpreadsheet

Экспортирование отчетов из базы данных в Excel с помощью библиотеки PhpOffice/PhpSpreadsheet

Доброго времени суток!

Сегодня мы рассмотрим с Вами пример того, как можно экспортировать данные в из массива PHP, полученного в результате выполнения SQL-запроса в Excel-файл. Использовать для этого мы будем библиотеку PhpOffice/PhpSpreadsheet.

Для начала установим саму библиотеку:

$ composer require phpoffice/phpspreadsheet

Код скрипта:


<?php

require __DIR__ . '/vendor/autoload.php';


use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;


function connection(string $host, string $db, string $user, string $pass, string $charset = 'utf8')
{
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];

    $pdo = new PDO($dsn, $user, $pass, $opt);

    return $pdo;
}


/**
 * Выполняет SQL-запрос к базе данных и возвращает массив
 * К полученному массиву добавляем названия столбцов из $header и возвращаем
 * 
 */
function getAllOrdersReport(PDO $connection)
{
    $header = ['Номер', 'Статус', 'Клиент', 'Откуда', 'Куда', 'К оплате', 'Цена', 'Долг', 'Создан'];

    $sql = "
    select `o`.`id`                                                                          as `Номер`,
        case
            when o.status = 1 then 'Ожидает рассмотрения'
            when o.status = 2 then 'Принят'
            when o.status = 3 then 'Назначен курьеру'
            when o.status = 4 then 'Получен курьером'
            when o.status = 5 then 'Ожидает клиента'
            when o.status = 6 then 'Выдан, оплачен полностью'
            when o.status = 7 then 'Выдан, оплачен частично'
            when o.status = 8 then 'Отменен'
            when o.status = 9 then 'Отложен'
            when o.status = 10 then 'Долг закрыт'
            end                                                                           as 'Статус',
        `clients`.`full_name`                                                             as `Клиент`,
        concat(a.city, ', ', (select cmp.name
                                from companies cmp
                                where cmp.id = a.company_id), ', ', a.street, ' ', a.house) as `Откуда`,
        case
            when o.destination_type = 2 then concat(
                    (select cities.name
                        from cities
                        where cities.id = clients.city_id),
                    ', ',
                    clients.street,
                    ', ',
                    clients.house,
                    ', ',
                    clients.flat
                                                )
            when o.destination_type = 3 then 'По договоренности'
            else concat(a2.city, ', ', (select cmp.name
                                        from companies cmp
                                        where cmp.id = a2.company_id), ', ', a2.street, ' ', a2.house)
            end                                                                           as shipment_to,
        o.price + o.client_debt                                                           as amount_to_pay,
        `o`.`price`,
        `o`.`client_debt`,
        `o`.`created_at`
    from `orders` as `o`
            left join `users` as `clients` on `o`.`client_id` = `clients`.`id`
            left join `delivery_points` as `a` on `o`.`shipping_from_id` = `a`.`id`
            left join `delivery_points` as `a2` on `o`.`shipping_to_id` = `a2`.`id`
            left join `users` as `couriers` on `o`.`courier_id` = `couriers`.`id`
    order by `o`.`created_at`
    ";

    $stmt = $connection->query($sql);
    $orders = $stmt->fetchAll();

    // так как массив $orders - двумерный, поэтому мы помещаем массив столбцов в еще один массив
    return array_merge([$header], $orders);
}


function createExcel(array $data)
{

    $spreadsheet = new Spreadsheet();
    $activeWorksheet = $spreadsheet->getActiveSheet();
    $activeWorksheet->fromArray($data); //   заполняем Excel-лист данными из массива

    $writer = new Xlsx($spreadsheet);
    $writer->save('отчет_01.xlsx');
}


// подключаемся к базе данных
$connection = connection('127.0.0.1', 'app_database', 'user', 'password');
// выполняем запрос
$orders = getAllOrdersReport($connection);

// создаем из полученных заказов Excel файл
createExcel($orders);

Вот так просто можно создать Excel-отчет с помощью библиотеки PhpOffice/PhpSpreadsheet.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.