Простой способ выгрузки таблицы в excel из PHP
Если надо просто выгрузить некую таблицу с сайта как файл excel, то подойдет достаточно простой способ.
Основная идея - excel уже давно умеет сохранять свои документы как html. Ну и самое простое решение - сохраняем любой документ именно так, открываем в текстовом редакторе, смотрим что и как там написано, пытаемся воспроизвести.
Рассмотрим самый банальный пример: (запрос к базе данных не рассматривается... только та часть, которая выгрузит файл, понятный excel'ю.
1. Формируем заголовок:
2. Теперь можно выводить ранее полученные данные, из MySQL, из файла, еще откуда - не важно. все на ваше усмотрения. Главное НЕ забыть сформировать стандартную HTML шапку под правильную кодировку (например utf-8) что бы в excel корректно отображалась кириллица. И не забываем про то, что кодировка файла скрипта также должна быть такой же.
3. И вот формирование самой таблицы, которая откроется в Excel
Код одним блоком внутри (далее).
1 2 3 4 5 6 7 8 9 10 |
/* // раскомментируйте строки ниже, если файл не будет загружаться header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); */ //стандартный заголовок, которого обычно хватает header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.xls"); header("Content-Transfer-Encoding: binary "); |
1 2 3 4 5 6 7 8 9 10 |
echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="author" content="zabey" /> <title>Demo</title> </head> <body> '; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// заголовок таблицы echo ' <table border="1"> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> '; while($row = $STH->fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo '<tr> <td>'.$row['col1'].'</td> <td>'.$row['col2'].'</td> </tr>'; } echo '</table>'; echo '</body></html>'; // не забываем закрывать таблицу, боди и сам хтмл документ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// !заголовок /* // раскомментируйте строки ниже, если файл не будет загружаться header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); */ //стандартный заголовок, которого обычно хватает header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.xls"); header("Content-Transfer-Encoding: binary "); // !! Шапка хтмл echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="author" content="zabey" /> <title>Demo</title> </head> <body> '; // !!! Таблица с данными // заголовок таблицы echo ' <table border="1"> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> '; while($row = $STH->fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo '<tr> <td>'.$row['col1'].'</td> <td>'.$row['col2'].'</td> </tr>'; } echo '</table>'; echo '</body></html>'; // не забываем закрывать таблицу, боди и сам хтмл документ |
Супер статья, только она мне и помогла, автор просто молодец
Спасибо, человек хороший, давно мучаюсь с этими расширениями, с кучей кода и так далее, все оказалось гораздо проще как с CSV . Единственное во ВЬЮХЕ
почему-то не работало, в контроллере без проблем.
Спасибо, Дружище
мля, пришлось перекроить кой чо.
тем не менее автору респект!))
БЛАГО ДАРЮ) Будь здоров)
спасибо, но: не скажете, почему-то все разделители не действуют и в EXCELL’е все слеплено в единую строку?
@Eu
Ну скорее всего это проблема в самом эксель файле, возможно включено какое то форматирование.
Для совсем неграмотных это можно посреди страницы вызвать или нужен отдельный файл ??
Как угодно и где угодно.
Молодец!
Зачод.
Спасибо!
Важный момент! Если в ячейки вставлять переносы строк () — Экзель будет бить на несколько строк, при этом разметка будет оставаться как для единой строки