У многих возникает проблема с экспортом простых HTML таблиц в Excel (*.xls). Сегодня мы покажем, как это можно сделать простым способом, не применяя дополнительных библиотек, используя PHP
Excel давно научился сохранять свои файлы, как HTML документ, следовательно мы можем выполнить данный процесс в обратную сторону – сохранить HTML документ (в нашем случае таблица 'table').
Перейдём сразу к делу.
Разберём все по порядку.
Это тот элемент, который нам необходимо перенести в Excel. Он может быть любого объема, самое главное, чтобы это была именно таблица HTML в тегах table. Причём не важно, есть в нем thead, или его нет. Но если он будет, то таблица выгрузится корректнее.
Под формой подразумевается одна кнопка, на которой будет написано "EXCEL" или "Выгрузить в Excel". Стилизовать кнопку вы сможете и сами. Главный смысл, чтобы данная кнопка при нажатии отправляла POST запрос в обработчик.
Вот пример:
Прежде чем объяснять, что включает себя эта форма, сразу покажу jQuery код, который тоже нужно добавить.
$(document).ready(function() { $('.button--excel').attr('disabled', false); var excel_data = $('#report_table').html(); $('#xls_data').val(excel_data); });
Теперь разложим, как работает эта форма в комбинации с js.
Поля в форме:
xls_data - Поле, в которое запишется наш код таблицы, который мы отправим в обработчик.
report_name - Название отчета (будет в названии файла)
button--excel - Кнопка отправки
В js коде происходит следующее. Кнопка экспорта становится активной (происходит разблокировка) по завершению загрузки страницы, далее код таблицы (в нашем случае id таблицы - #report_table), передается в поле #xls_data.
Со клиентской стороны всё готово, осталось создать простейший обработчик, который сформирует xls файл (внимание, пробелы перед началом тегов):
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 ' < html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> < head> < title>Demo < body>'; echo '< table border="1" cellpadding="15">'; echo $_POST["data"]; echo ''; echo '
'; echo '';
В данном обработчике есть все необходимые заголовки для формирования таблицы Excel с кодировкой UTF-8. Формируется название файла и вставляется сама таблица.
Готово! Можете проверять результат. Способ не должен быть реализован обязательно таким образом. Показан простой пример реализации.
Если вам необходима более сложная выгрузка с какой-либо логикой, в таком случае вам поможет библиотека PHPExcel.