Справочники, инструменты, документация

PHP: Экспорт таблицы HTML в Excel

У многих возникает проблема с экспортом простых HTML таблиц в Excel `*.xls`. Сегодня мы покажем, как это можно сделать простым способом, не применяя дополнительных библиотек, используя PHP.

Допустим у нас имеется любая HTML таблица (table). Необходимо выгрузить её в Excel при нажатии кнопки. Вот решение:

Добавим кнопку сформировать Excel:

<form action="xls.php" method="POST">
 <input type="hidden" name="data" id="xls_data" value="">
 <input type="hidden" name="report_name" value="x_report">
 <input type="submit" value="Excel" class="r_report_button--excel" disabled>
 </form>
  • xls_data - Данные, которые передаем, в данном случае таблица.
  • report_name - Имя отчета.
  • r_report_button - submit, кнопка отправки.

Теперь скрипт (jQuery), который поможет отправить таблицу POST-запросом:

 $(document).ready(function() {
 $('.r_report_button--excel').attr('disabled', false);
 var excel_data = $('#x_report_table').html(); 
 var report_data = $('.report_table').html(); 
 $('#xls_data').val(excel_data);
 $('#report_data').val(report_data);
 });

Активируем кнопку, как страница прогрузится до конца (нужно, если реально огромный объем данных). Hidden поля заполняются данными из таблицы. При нажатии кнопки запрос отправляется в файл xls.php.

header('Content-Type: application/vnd.ms-excel; charset=utf-8;'); 
header('Content-disposition: attachment; filename='.$_POST["report_name"].'_'.date("d-m-Y").'.xls'); 
header("Content-Transfer-Encoding: binary ");
echo '<!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <meta name="author" content="Sadovikow" />
 <title>Demo</title>
 </head>
 <body>';
echo '<table border="1" cellpadding="15">';
echo $_POST["data"]; 
echo '</table>';
echo '<br>';
echo '</body></html>';

В данном коде реализована формирование таблицы при помощи HTML. Заголовки нужны для корректной кодировки, очень важно, если имеется кириллица.

Всё очень просто, абсолютно любая таблица может спокойно быть экспортирована в Excel!