Экспорт в Excel
Кто-нибудь, подскажите, плиз, какой-то проверенный способ экспорта данных в Excel на PHP.
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
То что я использую:
1. csv
рядки - строки
колонки разделены ;
если нужно перенос строки внутри колонки - строка берётся в скобки
echo "\"first \n second\"";
2. html
более извращённый вариант
на PHP рисую HTML таблицу с CSS стилями, выглядит получше
Ну и всё это выдаётся:
браузер предлагает открыть Excel автоматически,
откуда можно уже сохранить в нормальном xls формате ..
1. csv
рядки - строки
колонки разделены ;
если нужно перенос строки внутри колонки - строка берётся в скобки
echo "\"first \n second\"";
2. html
более извращённый вариант
на PHP рисую HTML таблицу с CSS стилями, выглядит получше
Ну и всё это выдаётся:
Код: Выделить всё
header("Content-type: application/vnd.ms-excel");
header('Content-disposition: attachment; filename="report_' . date("Y-m-d") . '.xls"');
print $output;
exit;
откуда можно уже сохранить в нормальном xls формате ..
Oscar
надо ли для каждого из двух вариантов устанавливать дополнительные библиотеки?
если не трудно, дай простой полный пример.
надо ли для каждого из двух вариантов устанавливать дополнительные библиотеки?
если не трудно, дай простой полный пример.
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Виталик, в том-то и дело, что для этих вариантов дополнительные библиотеки не нужны.
Только я немного перепутал, в первом варианте колонки разделяются не точкой с зяпятой, а символом табуляции (хотя, csv формат я тоже когда-то писал, кажется)
Итак, первый пример:
и второй пример
Только я немного перепутал, в первом варианте колонки разделяются не точкой с зяпятой, а символом табуляции (хотя, csv формат я тоже когда-то писал, кажется)
Итак, первый пример:
Код: Выделить всё
<?php
$output = "Nr\tName\n";
$names = array();
$names[count($names)] = "Name1";
$names[count($names)] = "Name2";
$names[count($names)] = "Name3";
$names[count($names)] = "Name4";
$names[count($names)] = "Name5";
foreach($names as $k=>$v) {
$output .= "$k\t\"$v\n\"line break\"\n";
}
header("Content-type: application/vnd.ms-excel");
header('Content-disposition: attachment; filename="report_' . date("Y-m-d") . '.xls"');
print $output;
exit;
?>
Код: Выделить всё
<?php
header("Content-type: application/vnd.ms-excel");
header('Content-disposition: attachment; filename="report_' . date("Y-m-d") . '.xls"');
?>
<table>
<tr>
<td style="background-color: #FFFF00; text-align: center; font-weight: bold; border-right: .5pt solid black; border-bottom: 1pt solid black;">Column1</td>
<td style="background-color: #FFFF00; text-align: left; font-weight: bold; border-right: .5pt solid black; border-bottom: 1pt solid black;">Column2</td>
<td style="background-color: #FFFF00; text-align: left; font-weight: bold; border-right: .5pt solid black; border-bottom: 1pt solid black;">Column3</td>
</tr>
<tr>
<td style="background-color: #99CCFF; text-align: center; border-right: .5pt solid black; border-bottom: 1pt solid black;">1</td>
<td style="border-right: .5pt solid black; border-bottom: 1pt solid black;">field 2</td>
<td style="border-right: .5pt solid black; border-bottom: 1pt solid black;">field 3</td>
</tr>
<tr>
<td style="border-right: .5pt solid black; border-bottom: 1pt solid black; border-top: 1pt solid black;"></td>
<td style="background-color: #FFFF00; font-weight: bold; text-align: right; border-right: .5pt solid black; border-bottom: 1pt solid black; border-top: 1pt solid black;">something</td>
<td style="background-color: #FF9900; font-weight: bold; text-align: center; border: 1pt solid black; border-top: 1pt solid black;">test
line break</td>
</tr>
</table>
Oscar,
спасибо, взял предложенный способ на вооружение.
по ходу возник такой вопрос: есть страничка на которой есть иконка "Экспорт в Excel", по клику на иконке открывается новое
окошко (php-файл) которое создаёт Excel-файл. как сделать чтобы после создания Excel-файл новое закрывалось? (в BODY
window.close() нельзя вставлять, надо вставить в конце скрипта, но то что пишу в конце автоматом добавляется в Excel-файл)
спасибо, взял предложенный способ на вооружение.
по ходу возник такой вопрос: есть страничка на которой есть иконка "Экспорт в Excel", по клику на иконке открывается новое
окошко (php-файл) которое создаёт Excel-файл. как сделать чтобы после создания Excel-файл новое закрывалось? (в BODY
window.close() нельзя вставлять, надо вставить в конце скрипта, но то что пишу в конце автоматом добавляется в Excel-файл)
Виталик,
всплыл один интересный момент: если рисовать таблицу в которой количество строк больше 6, то русский шрифт отображается аброкадаброй, есле же урезать количество до меньше равно 6, то русский отображается нормально.
всплыл один интересный момент: если рисовать таблицу в которой количество строк больше 6, то русский шрифт отображается аброкадаброй, есле же урезать количество до меньше равно 6, то русский отображается нормально.
Oscar,
с кодировкой разобрался, осталоётся вопрос как закрыть новое окно после создания Excel-файла.
с кодировкой разобрался, осталоётся вопрос как закрыть новое окно после создания Excel-файла.
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Виталик, никак не получится,
это зависит от настроек браузера пользователя.
у меня, например, оно открывается не в новом окне, а сразу выскакивает окошко с вопросом "открыть/сохранить" (Фаерфокс)
это зависит от настроек браузера пользователя.
у меня, например, оно открывается не в новом окне, а сразу выскакивает окошко с вопросом "открыть/сохранить" (Фаерфокс)
Oscar,
Можно ли чтобы отработал php-файл, который создаёт xls-файл, и при этом он не открывался в отдельной страничке, что-то наподобии:
<script type='text/javascript' language='javascript' id='run_php'></script>
<script type='text/javascript' language='javascript'>document.all.run_php.src='../php/my_php_file.php';</script>
Можно ли чтобы отработал php-файл, который создаёт xls-файл, и при этом он не открывался в отдельной страничке, что-то наподобии:
<script type='text/javascript' language='javascript' id='run_php'></script>
<script type='text/javascript' language='javascript'>document.all.run_php.src='../php/my_php_file.php';</script>
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Виталик, нельзя, в стандартный аутпут PHP не может уже писать (нельзя отослать хэдэр, т.к. body уже отослан),
PHP может лишь рисовать JavaScript, но что это даст?..
Максимум, чего там можно добиться, это чтобы my_php_file.php писал в другой файл на сервере (больше некуда), с именем XXX.xls,
после чего на странице рисовать при помощи JS ссылку на этот самый файл (XXX),
кроме того, в my_php_file.php нужно удалять старый файл и писать новый поверх.
НО! Старый файл всегда будет оставаться на сервере,
так что защитить его будет не просто.
другой вариант: сделать невидимый фрейм, и PHP пихать в него по src,
быть может тогда не будет появляться новое окно,
не пробовал, не знаю.
я бы сказал, что это всё извращения,
но выбирать тебе.
PHP может лишь рисовать JavaScript, но что это даст?..
Максимум, чего там можно добиться, это чтобы my_php_file.php писал в другой файл на сервере (больше некуда), с именем XXX.xls,
после чего на странице рисовать при помощи JS ссылку на этот самый файл (XXX),
кроме того, в my_php_file.php нужно удалять старый файл и писать новый поверх.
НО! Старый файл всегда будет оставаться на сервере,
так что защитить его будет не просто.
другой вариант: сделать невидимый фрейм, и PHP пихать в него по src,
быть может тогда не будет появляться новое окно,
не пробовал, не знаю.
я бы сказал, что это всё извращения,
но выбирать тебе.