1
Программы / Экспорт из PHP в Excel
« : 30 Октября 2011, 09:48:41 »
У многих, с течением времени возникает потребность выгружать данные с сайта (Базы данных, далее БД) в Эксель. В примитивных вариантах выручает возможность Экселя записывать в разные столбцы данные разделённые табулятором, нам остаётся только сохранить на диске текстовый файл с расширением .xls и перенаправить (лучше открыть ещё одно окно) браузер(а) на этот файл с высылкой заголовков для Экселя, например так (далее расскажу как это действо сделать через PHP с использованием самого Эксель, и без него, но на выходе будет не текстовый файл, а Экселевский, т.е. с форматированием ячеек):
http://www.kompvp.ru/test/index.php:
<?php
//Определяем массив выгружаемых данных в примере состоящий из имени и количества
$name[0]="Name1";
$name[1]="Name2";
$name[2]="Name3";
$kol[0]=56;
$kol[1]=22;
$kol[2]=37;
//Записываем данные в файл (имя файла ‘filename‘ в примере будет = количеству секунд с 01.01.1970г., это для того чтобы было легко удалять невостребованные файлы по истечении срока старения, например через 1 час, т.е. 60сек. Х 60мин. = 360 сек., но об этом как ни будь позже и наверное в отдельно топе т.к. вариантов удаления по времени старения тоже есть несколько.)
$filename=time();
$file=fopen("tmp/".$filename.".xls", "w");
for($i=0; $i < count($name); $i++)
{
//chr(9) - табулято, chr(13).chr(10) - виртуальный Ентер
fputs($file, $name[$i].chr(9).$kol[$i].chr(13).chr(10));
}
//Открываем новое окно, в которое передаём методов GET имя файла для открытия в экселе
$exfile="'http://www.kompvp.ru/test/xls.php?file=".$filename."', '', config='height=10,width=10,scrollbars=1,location=0'"; ?>
<script>
window.open(<?php echo $exfile; ?>);
</script>
http://www.kompvp.ru/test/xls.php:
<?php
//Проверяем есть ли переменная file
if(@$file<>"")
{
//Проверяем есть ли файл в папке tmp с именем file и расширением .xls
if(is_file("tmp/".$file.".xls")=="1")
{
//Высылаем нужные заголовки, для открытия файла в Экселе
header("Content-Type: application/x-msexcel; name='".$file."'");
header("Content-Disposition: inline; filename=".$file);
//Читаем файл и отправляем клиенту в Эксель
$fh=fopen("tmp/".$file.".xls", "rb");
fpassthru($fh);
}
}
?>
Далее попробуем сваять экспорт данных в Эксель средствами Экселя (он должен быть установлен на компе).
http://www.kompvp.ru/test/ - заменить на свой хост.
http://www.kompvp.ru/test/index.php:
<?php
//Определяем массив выгружаемых данных в примере состоящий из имени и количества
$name[0]="Name1";
$name[1]="Name2";
$name[2]="Name3";
$kol[0]=56;
$kol[1]=22;
$kol[2]=37;
//Записываем данные в файл (имя файла ‘filename‘ в примере будет = количеству секунд с 01.01.1970г., это для того чтобы было легко удалять невостребованные файлы по истечении срока старения, например через 1 час, т.е. 60сек. Х 60мин. = 360 сек., но об этом как ни будь позже и наверное в отдельно топе т.к. вариантов удаления по времени старения тоже есть несколько.)
$filename=time();
$file=fopen("tmp/".$filename.".xls", "w");
for($i=0; $i < count($name); $i++)
{
//chr(9) - табулято, chr(13).chr(10) - виртуальный Ентер
fputs($file, $name[$i].chr(9).$kol[$i].chr(13).chr(10));
}
//Открываем новое окно, в которое передаём методов GET имя файла для открытия в экселе
$exfile="'http://www.kompvp.ru/test/xls.php?file=".$filename."', '', config='height=10,width=10,scrollbars=1,location=0'"; ?>
<script>
window.open(<?php echo $exfile; ?>);
</script>
http://www.kompvp.ru/test/xls.php:
<?php
//Проверяем есть ли переменная file
if(@$file<>"")
{
//Проверяем есть ли файл в папке tmp с именем file и расширением .xls
if(is_file("tmp/".$file.".xls")=="1")
{
//Высылаем нужные заголовки, для открытия файла в Экселе
header("Content-Type: application/x-msexcel; name='".$file."'");
header("Content-Disposition: inline; filename=".$file);
//Читаем файл и отправляем клиенту в Эксель
$fh=fopen("tmp/".$file.".xls", "rb");
fpassthru($fh);
}
}
?>
Далее попробуем сваять экспорт данных в Эксель средствами Экселя (он должен быть установлен на компе).
http://www.kompvp.ru/test/ - заменить на свой хост.