phpexcel для завантаження


79

привіт, я новачок у phpexcel, і мені було цікаво, чи є якийсь спосіб надіслати створений мною Excel клієнтам, не завантажуючи його на свій сервер, або видалити його відразу після того, як він його завантажить

я намагаюся створити "кнопку експорту" на сторінці, яка дасть користувачеві "спливаюче вікно" з Excel, який він хоче, що я щойно створив.

тепер після створення таблиці я роблю:

$objXLS->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
$objXLS->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);

$objXLS->getActiveSheet()->setTitle('Test Stats');

$objXLS->setActiveSheetIndex(0);

$objWriter = PHPExcel_IOFactory::createWriter($objXLS, 'Excel5');
$objWriter->save(__DIR__."/test1.xls");

але це зберігає його на моєму сервері

Дякую

Відповіді:


169

Замість того, щоб зберігати його у файлі, збережіть його в php://outputДокументах :

$objWriter->save('php://output');

Це надішле його як-небудь у браузер.

Ви хочете , щоб додати деякі заголовки Docs першим, як це спільний з завантаженням файлів, так що браузер знає , який тип цього файл і як воно повинно бути названо (ім'я файл):

// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');

// It will be called file.xls
header('Content-Disposition: attachment; filename="file.xls"');

// Write file to the browser
$objWriter->save('php://output');

Спочатку виконайте заголовки, потім збережіть. Щодо заголовків Excel, див. Також наступне питання: Встановлення типу mime для документа Excel .


1
я отримую файл для завантаження, але це не те, що я створив, і коли я роблю $ objWriter-> save ('php: // output'), він псує мою сторінку дірок = \
Dvir Levy

1
Будьте обережні, що єдине, що ви виведете на цій сторінці, це вихід з двох headerрядків та ->save()дія. Вам потрібно вирішити: а) відображення сторінки чи б) пропозицію завантаження. І те, і інше не легко працює з одним сценарієм. Однак ви можете створити один сценарій для завантаження та один для сторінки, і коли скрипт сторінки буде виконаний, перенаправіть його на сценарій завантаження, що змусить браузер запропонувати діалогове вікно збереження як.
hakre

моя проблема полягає в тому, що я використовую joomla, і я не можу знайти спосіб завантажити її з порожньої сторінки. кожного разу, коли я намагаюся, я отримую сторінку joomla hole з меню та іншим. Ви знаєте, де я міг знайти відповідь на цю проблему? я не хочу переповнювати стек спаму ...
Dvir Levy

Dvir - використовуйте & format = raw у вашій URL-адресі. У своєму mvc створіть файл view.raw.php.
MSD

1
Як можна встановити Content-Lengthзаголовок під час використання php://output?
tonix

22
$excel = new PHPExcel();
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="your_name.xls"');
header('Cache-Control: max-age=0');

// Do your stuff here

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');

// This line will force the file to download
$writer->save('php://output');

привіт і дякую за відповідь. я ставлю рядок $ writer-> save ('php: // output'); і він не завантажує файл, а друкує сміття на сторінці. ти знаєш, чому це трапляється?
Двір Леві

Ви також встановили заголовки?
матіно

Я намагаюся створити PPT за допомогою PHPPowerpoint, точно зробив згадані кроки, але змінивши MIMEтип на application/vnd.openxmlformats-officedocument.presentationml.presentation, він завантажує файл у мою систему, але говорить це File can't be opened. Файл працював, коли код писав його на сервер.
недійсний

Працював для мене ідеально. Дякую ¡
Jam

6

ДЛЯ ВИКОРИСТАННЯ XLSX

ВСТАНОВИТИ У $ xlsНазва імені від XLSX із розширенням. Приклад: $ xlsName = 'teste.xlsx';

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$xlsName.'"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

ДЛЯ ВИКОРИСТАННЯ XLS

ВСТАНОВИТИ У $ xlsНазва імені від XLS із розширенням. Приклад: $ xlsName = 'teste.xls';

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$xlsName.'"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

3
PSI. Формат XLS за замовчуванням визначається як "Excel5", а XLSX - "Excel2007".
Роджеріо де Мораес,

Я намагаюся створити PPT за допомогою PHPPowerpoint, точно зробив згадані кроки, але змінивши MIMEтип на application/vnd.openxmlformats-officedocument.presentationml.presentation, він завантажує файл у мою систему, але говорить це File can't be opened. Файл працював, коли код писав його на сервер.
недійсний

Тип вмісту для xlsx повинен бути таким: "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet". Див. Filext.com/faq/office_mime_types.php
kojow7,

5

Використовуйте цей дзвінок

$objWriter->save('php://output');

Щоб вивести аркуш XLS на сторінку, на якій ви перебуваєте, просто переконайтеся, що сторінка, на якій ви перебуваєте, не має інших результатів відлуння, друку.


Під час роботи у спільному хостингу я отримую помилку (можливо, пов’язану з дозволами на файли та папки) при використанні $ objWriter-> save ('php: // output'); Невпійманий виняток 'PHPExcel_Writer_Exception' із повідомленням 'Не вдалося відкрити php: // вихід для запису.' у third_party / PHPExcel / Writer / Excel2007.php: 241 Трасування стека: # 0
Енріке

Я намагаюся створити PPT за допомогою PHPPowerpoint, точно зробив згадані кроки, але змінивши MIMEтип на application/vnd.openxmlformats-officedocument.presentationml.presentation, він завантажує файл у мою систему, але говорить це File can't be opened. Файл працював, коли код писав його на сервер.
недійсний

3
 header('Content-type: application/vnd.ms-excel');

 header('Content-Disposition: attachment; filename="file.xlsx"');

 header('Cache-Control: max-age=0');

 header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

 header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

 header ('Cache-Control: cache, must-revalidate');

 header ('Pragma: public');

 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

 $objWriter->save('php://output');

Я намагаюся створити PPT за допомогою PHPPowerpoint, точно зробив згадані кроки, але змінивши MIMEтип на application/vnd.openxmlformats-officedocument.presentationml.presentation, він завантажує файл у мою систему, але говорить це File can't be opened. Файл працював, коли код писав його на сервер.
недійсний

3

можливо, ви вже вирішили свою проблему, я сподіваюся, це допоможе вам.

всі завантажені файли починаються з порожнього рядка, у моєму випадку це чотири порожні рядки, і це створює проблему. Незалежно від того , якщо ви працюєте з readfile();або save('php://output');, Це може бути виправлено з додаванням ob_start();на початку сценарію і ob_end_clean();безпосередньо перед тим readfile(), або save('php://output');.


Проблема у вас пов’язана з реєстрацією та звітуванням про помилки: ви не бачите попереджень, які б вказували на проблему: заголовки вже надіслані. Про це йдеться в цьому довідковому питання: stackoverflow.com/q/8028957/367456
hakre

2
ob_end_clean()notod_end_clean()
turson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.