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'), он портит мою страницу с дырой = \
Двир Леви

1
Позаботьтесь о том, чтобы единственное, что вы выводили на этой странице, - это результат двух headerстрок и ->save()действия. Вам нужно выбрать между а) отображением страницы или б) предложением загрузки. Оба не работают с одним скриптом легко. Однако вы можете создать один сценарий для загрузки и один для страницы, и когда сценарий страницы будет выполнен, перенаправить на сценарий загрузки, который заставит браузер предлагать диалоговое окно сохранения как.
hakre

Моя проблема в том, что я использую joomla и не могу найти способ загрузить его с пустой страницы. Каждый раз, когда я пытаюсь, я получаю дырочку на странице joomla с меню и всем остальным. ты знаешь, где я могу найти ответ на эту проблему? Я не хочу, чтобы переполнение стека спама ...
Двир Леви

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'); и он не загружает файл, а выводит на страницу мусор. ты знаешь, почему это происходит?
Двир Леви,

Вы также установили заголовки?
matino

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

Сработал перефект у меня. Спасибо ¡
Jam

6

ДЛЯ ИСПОЛЬЗОВАНИЯ XLSX

SET IN $ xlsName имя из 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

SET IN $ xlsName имя из 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».
Rogerio de Moraes

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

Тип содержимого для 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: // для записи». in third_party / PHPExcel / Writer / Excel2007.php: 241 Трассировка стека: # 0
Энрике

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

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. Файл работал, когда код записывал его на сервер.
void

3

возможно, вы уже решили свою проблему, в любом случае, я надеюсь, что это вам поможет.

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


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

2
ob_end_clean()нетod_end_clean()
турсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.