PHP экспорт в EXCEL без сохранения файла на сервере
PETSEE.NET
Все закладки
IT-технологии
Автомобили
Бизнес и финансы
Графика
Животные
Кулинария
Лингвистика
Медицина
Мотоциклы
Музыка
Растения
Спорт
Юмор
Прочее
Основное Разделы Дополнения Участникам
PHP экспорт в EXCEL без сохранения файла на сервере
Реклама
 
Проверь свои знания :-)
Ранг:Без мыслей
Статус ответа:Думаю...
Рейтинг знаний:0
Имя участника:
Где Балканская гончая?

PHP экспорт в EXCEL без сохранения файла на сервере

Для того чтобы создать выгрузку из PHP в EXCEL-файл и при этом не засорять сервер
физическими файлами, можно просто отправить соответствующие заголовки
страницы:
Создаем PHP-скрипт:

<?php
/*
// разкомментируйте строки ниже, если файл не будет загружаться
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
*/
//стандартный заголовок, которого обычно хватает
header('Content-Type: text/x-csv; charset=utf-8');
header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.xls");
header("Content-Transfer-Encoding: binary ");
/*
// Теперь можно выводить ранее полученные данные, будь то из MySQL
// будь то из файла, или же полученные в работе скрипта...
// для начала лучше использовать стандартную
// шапку для HTML страницы под вашу кодировку, к примеру utf-8
// чтобы корректно отображалась кириллица в EXCEL
// так же убедитесь что сам файл скрипта установлен в соответствующей
кодировке это можно посмотреть в любом PHP редакторе
// итак, шапка страницы:
*/
$csv_output ='<!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="Andrey" />
<title>deamur zapishi.net</title>
</head>
<body>';

// Теперь данные в виде таблицы:
$csv_output .='<table border="1"><tr><td>первое поле</td><td>второе поле</td></tr></table>';

// закрываем тело страницы
$csv_output .='</body></html>';
// И наконец выгрузка в EXCEL - что в скрипте как обычный вывод
echo $csv_output;
/*
// браузер выдаст окно на запрос загрузки и сохранения файла
// скрипт готов, пользуйтесь на здоровье !
// при перепечатке оставляйте ссылку на сайт zapishi.net :)
// Регистрируйтесь и публикуйте свои материалы на сайте - поможем друг
другу получить больше новых знаний! :)
*/
?>

09.02.2011 / Андрей / Рейтинг: 8.44 (16 голосов) 

<<<
<
1
2
3
4
5
6
7
8
9
10
11
>
>>>
Всего страниц: 1
Комментарии:
Максим // 2017-06-03 23:04:22
Как сделать сохранение в xlsx файл?
Дима // 2015-06-11 17:55:53
Спсибо! Просто, отлично и работает!!!
Правда немного напрягает сообщение EXCEL при открытии, но с этим можно смериться *)
Andrey // 2014-04-24 14:47:32
to AL: Скорее всего где-то с кодировками конфликт.
Если данные берутся из базы, то либо таблица не в той кодировке, либо соединение с базой, либо сами файлы в разных кодировках...
AL // 2014-04-23 18:00:32
Добрый день!
При выводе excel появляются какие-то японские иероглифы.
В чем может быть проблема?
Спасибо!
Александр_sky // 2013-12-12 08:32:35
А можно как нибудь сделать, что бы при открытии файла не выходило сообщение и не надо было его преобразовывать????
Andrey // 2013-01-24 15:34:14
to promo:
Пожалуйста! )
На счет размера и того что текст в экселе обрезается, сам, как решением, просто указывал нужный размер для ячеек через стиль или параметр width="500"
promo // 2013-01-13 18:15:13
Хороший облегченный вариант вывода из php в excel. Спасибо!
Но есть одна проблемка: при выводе большого объема текста в ячейку - он урезается, т.е. не полностью влезает в ячейку. Код ячейки:
<td colspan='6' align='left' style='padding:3px;border-bottom:1px dotted;border-top:1px dotted;vertical-align:top;white-space: normal;'>".$col7[$j]."<br></td>.
Максимальный размер по вертикали при выводе в эксель у ячеки 153px.
Надо решить проблему.
Andrey // 2012-10-11 14:37:05
to Hitson:

Ячейку нужно сделать шире. Такие каракули, эксель вроде выдает если цифра вылазит за границы поля.
А вообще я прописывал number_format c точкой или запятой в зависимости от необходимости.
Hitson // 2012-10-10 18:48:58
А вот как бороться с форматом ячейки при выгрузке?

Числовые данные выгружаются в ячейку ексель и показываются там в формате "7,61303Е+12", а надо 7613032267537.

Как это правильно исправить?
Andrey // 2012-08-05 19:10:50
to Гоша:
Варианта 3:

1. Либо веб-сервер не настроен и не обрабатывает .php файлы, читая их как текстовый файл;
2. Либо скрипт сделан не в .php файле;
3. Либо, перед тем как сделать вывод, содержимое переменной, в которой таблица, преобразовывает HTML-символы в мнемоники, с помощью функции htmlspecialchars или htmlentities.

Хотя возможны и другие причины, но все они сводятся к тому, что ошибка не в скрипте, а в применении! :)
Гоша // 2012-08-05 11:53:24
Скрипт вместо таблицы в выводимом файле почему-то выдаёт код страницы, на которой выполняется.
Анонимка // 2012-07-26 00:04:06
Вот спасибо! Всег благ:)
Andrey // 2012-05-16 21:04:37
to Антонина:

Да, можно. Например так:
<table width="10000"
или указать размер для каждой ячейки:
<td width="500"
или
<td style="min-width:240px;"
Антонина // 2012-05-16 12:51:53
Да, nowrap действительно помог, спасибо!А что касается второго вопроса:
Можно ли задать масштаб страницы в Excel не 100%, как по умолчанию, а больше?
Andrey // 2012-05-15 18:39:50
to Антонина:

относительно вопросов:
1. не пробовал, но возможно убрать перенос по словам поможет опция таблицы <td nowrap="1000"></td>, или стиль ячейки:
<style>
td{
white-space: nowrap;
}
</style>
В крайнем случае, можно задать для ячеек ширину, чтобы содержимое ячейки вмещалось в одну строку.

2. если не задавать ширину таблицы, то ширина будет определяться контентом и количеством ячеек.

Пользуйтесь на здоровье! :)
Антонина // 2012-05-15 13:22:45
Спасибо за скрипт.
Вопрос в том, что при открытии файла вижу, что в формате ячейки стоит отображение "переносить по словам". А можно ли как то указать, чтобы этой галочки не было?
И еще интересует можно ли задать масштаб страницы не 100%, как по умолчанию, а больше?
Andrey // 2012-05-07 19:07:05
to Иван: Файл сохраняется HTML разметкой, поэтому при первом открытии эксель автоматом преобразует файл в свой формат, но естественно выдаст предупреждение. А то что нет линий, так это нужно в скрипте стиль таблицы установить <table border="1" и убедиться что это нигде не перекрывается - то есть у таблицы в коде должна быть рамка и тогда эксель ее тоже покажет.
Иван // 2012-05-07 17:57:35
Попробовал ваш скрипт при попытки открыть конечный файл выходит предупредительное сообщение "Действительный формат открываемого файла ххх отличается от указанного в заголовке" но файл открывает и тут опять проблема нет линий ячеек.
Andrey // 2012-03-27 19:27:31
<?php

//Можно конечно! Но таблицы могут быть разными и как ее должна строить функция - это ведь дело персональное для каждого случая. Если пара простых вариантов, типа:

function creatXLStd($massTD='')
{
if($massTD)
{
return '<tr><td>'.implode('</td><td>',$massTD).'</td></tr>';
}
}

//где вызов будет
$massTD[]='первое поле';
$massTD[]='второе поле';

echo '<table border="1">';
echo creatXLStd($massTD);
echo creatXLStd($massTD);
echo '</table>';


function creatXLSm($mass='')
{
if($mass)
{
foreach($mass as $temp)
{
if(!isset($content))
{
$content='<table border="1">';
}
$content .='<tr><td>'.implode('</td><td>',$temp).'</td></tr>';
}

if($content)
{
$content .='</table>';
return $content;
}

}
}

//где вызов будет типа:
$mass[0][]='первое поле';
$mass[0][]='второе поле';
$mass[1][]='первое поле';
$mass[1][]='второе поле';
$mass[2][]='первое поле';
$mass[2][]='второе поле';

echo creatXLSm($mass);


//ну а дальше уже соответствующие header, которые по желанию тоже можно добавить в функцию
?>
Дмитрий // 2012-03-26 13:01:30
А можно ли как-то этот код в php-функции реализовать? И содержимое таблицы передавать через параметр?
Андрей // 2012-02-01 02:34:31
Доброе!
Елена, Вам нужно:
Вначале определить переменную, присвоив ей любое значение, например ничто в кавычках )
$csv_output='';

после чего заменить в своем коде все "echo" на "$csv_output .=" и не забудьте точку перед равно, иначе прежние данные из переменной потеряются.
в кратком примере это выглядит так:

$csv_output='';
$csv_output .= "<form action=\"rec.php\" ....
Елена // 2012-01-31 09:13:33
Доброе время суток!
Если не сложно, поясните, пожалуйста, про таблицу.

У меня данные в таблице выводятся из бд.
Как присвоить -$csv_output такую запись:


echo "<form action=\"rec.php\" method=\"get\" name=\"output_data\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"seenform\" value=\"y\">
<table border=1 cellspacing=1 cellpadding=2>
<tr> <td width=5px>ID</td>
<td width=100px>FIO</td>
<td width=50px>Birthday</td>
<td width=10px>Male</td>
<td>Nationality</td>
<td>Docs1</td>
<td>Petty</td>
<td>Birthday petty</td>
<td>Docs petty</td>
<td width=100px>Action</td>
<td> </td>
</tr>";
$row = mysql_connect($DBHost,$DBLogin,$DBPassword) or die("Could not connect");
@mysql_select_db($DBName);
@mysql_query("SET NAMES 'utf8';");
$res=mysql_query("SELECT * FROM `fio`") or die("Could not query:". mysql_error());

while ($d=mysql_fetch_array($res))
{
echo '<tr><td>'.$d[0].'</td><td>'.$d[1].'</td><td>'.$d[2].'</td><td>'.$d[3].'</td><td>'.$d[ 4].'</td><td>'.$d[5].'</td><td>'.$d[6].'</td><td>'.$d[7].'</td><td>'.$d[8].'</td><td>' .$d[9].'</td><td>'.$b1.'<br />'.$b2.'</td></tr>';
}
echo "</table>";
echo "</form>";

Заранее спасибо большое!
Оленька // 2012-01-15 22:46:09
МОЛОЧИНКА
СПАСИБКИ ЗА КОД))
Denis // 2011-12-13 16:12:31
Спасибо!
Роман // 2011-10-02 03:32:20
Спасибо!
Всё просто и понятно. Настроил под себя скриптик, так как данные хранятся в MySQL =) Быстро и легко всё сделал. Спасибо ещё раз
Oleg // 2011-08-27 17:35:21
Вот ещ неплохой скрипт подобный: http://exls.ru/whatisthis/
цик // 2011-08-16 15:36:10
спасибо
костец // 2011-04-24 18:45:05
Спасибо, все понятно и ясно изложено.
инкогнито // 2011-04-22 15:42:08
Большое спасибо, помогло!
Добавить комментарий
Ваше имя:
Введите код:
Текст комментария:
Защищено www.petsee.net
2009 — 2017