phpexcel do pobrania


79

witam, jestem nowy w phpexcelu i zastanawiałem się, czy jest jakiś sposób wysłania utworzonego przeze mnie programu Excel do klientów pobierz bez zapisywania go na moim serwerze lub usunięcie go zaraz po jego pobraniu

Próbuję utworzyć „przycisk eksportu” na stronie, który da użytkownikowi „wyskakujące okienko” z programem Excel, którego chce, a który właśnie utworzyłem.

teraz po utworzeniu tabeli robię:

$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");

ale to zapisuje go na moim serwerze

Dziękuję Ci

Odpowiedzi:


169

Zamiast zapisywać go w pliku, zapisz go w php://outputDokumentach :

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

Spowoduje to wysłanie go do przeglądarki w stanie, w jakim się znajduje.

Chcesz dodać kilka nagłówków Dokumenty pierwsze, jak to często podczas pobierania plików, więc przeglądarka wie, jaki typ pliku, który jest i jak powinien być nazwany (nazwa pliku):

// 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');

Najpierw wykonaj nagłówki, a następnie zapisz. W przypadku nagłówków programu Excel zobacz również następujące pytanie: Ustawianie typu MIME dla dokumentu programu Excel .


1
Pobieram plik do pobrania, ale to nie jest to, co stworzyłem, a kiedy robię $ objWriter-> save ('php: // output'), to psuje moją stronę dziury = \
Dvir Levy

1
Uważaj, aby jedyną rzeczą, jaką wyświetlasz na tej stronie, było wyjście z dwóch headerwierszy i ->save()akcji. Musisz zdecydować między a) wyświetleniem strony lub b) zaoferowaniem pobrania. Oba nie działają łatwo z jednym skryptem. Możesz jednak utworzyć jeden skrypt dla pobierania i jeden dla strony, a po wykonaniu skryptu strony, przekierować do skryptu pobierania, co spowoduje, że przeglądarka wyświetli okno dialogowe Zapisz jako.
hakre

moim problemem jest to, że używam Joomla i nie mogę znaleźć sposobu, aby załadować go z pustej strony. za każdym razem, gdy próbuję, otrzymuję stronę Joomla z otworami z menu i wszystkim. czy wiesz, gdzie mogłem znaleźć odpowiedź na ten problem? nie chcę spamować przepełnienia stosu ...
Dvir Levy,

Dvir - użyj & format = raw w swoim adresie URL. W swoim MVC utwórz plik view.raw.php.
MSD

1
Jak ustawić Content-Lengthnagłówek podczas używania 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');

witam i dziękuję za odpowiedź. wstawiam wiersz $ writer-> save ('php: // output'); i nie pobiera pliku, który wypisuje na stronie. wiesz, dlaczego tak się dzieje?
Dvir Levy

Czy ustawiłeś również nagłówki?
matino

Próbuję zbudować PPT przy użyciu PHPPowerpoint, dokładnie wykonałem wymienione kroki, ale zmieniając MIMEtyp na application/vnd.openxmlformats-officedocument.presentationml.presentation, to pobiera plik w moim systemie, ale to mówi File can't be opened. Plik działał, gdy kod zapisywał go na serwerze.
nieważne

Pracował idealnie dla mnie. Dzięki¡
Jam

6

DO UŻYTKU XLSX

SET IN $ xlsName z XLSX z rozszerzeniem. Przykład: $ 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');

DO STOSOWANIA XLS

SET IN $ xlsName nazwa z XLS z rozszerzeniem. Przykład: $ 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 .: Format XLS domyślnie definiuje „Excel5”, a XLSX to „Excel2007”.
Rogerio de Moraes

Próbuję zbudować PPT przy użyciu PHPPowerpoint, dokładnie wykonałem wymienione kroki, ale zmieniając MIMEtyp na application/vnd.openxmlformats-officedocument.presentationml.presentation, to pobiera plik w moim systemie, ale to mówi File can't be opened. Plik działał, gdy kod zapisywał go na serwerze.
nieważne

Typ zawartości dla xlsx powinien brzmieć: „application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”. Zobacz filext.com/faq/office_mime_types.php
kojow7

5

Użyj tego połączenia

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

Aby wydrukować arkusz XLS na stronie, na której się znajdujesz, po prostu upewnij się, że strona, na której się znajdujesz, nie ma innych wydruków, wydruków.


Podczas pracy w hostingu współdzielonym pojawia się błąd (być może związany z uprawnieniami do plików i folderów) podczas używania $ objWriter-> save ('php: // output'); Niezłapany wyjątek „PHPExcel_Writer_Exception” z komunikatem „Nie można otworzyć wyjścia php: // do zapisu”. w third_party / PHPExcel / Writer / Excel2007.php: 241 Śledzenie stosu: # 0
Enrique

Próbuję zbudować PPT przy użyciu PHPPowerpoint, dokładnie wykonałem wymienione kroki, ale zmieniając MIMEtyp na application/vnd.openxmlformats-officedocument.presentationml.presentation, to pobiera plik w moim systemie, ale to mówi File can't be opened. Plik działał, gdy kod zapisywał go na serwerze.
nieważne

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');

Próbuję zbudować PPT przy użyciu PHPPowerpoint, dokładnie wykonałem wymienione kroki, ale zmieniając MIMEtyp na application/vnd.openxmlformats-officedocument.presentationml.presentation, to pobiera plik w moim systemie, ale to mówi File can't be opened. Plik działał, gdy kod zapisywał go na serwerze.
nieważne

3

możliwe, że już rozwiązałeś swój problem, mam nadzieję, że to ci pomoże.

wszystkie pobierane pliki zaczynają się od pustej linii, w moim przypadku są to cztery puste linie, i powoduje to problem. Nieważne, czy pracujesz z readfile();lub save('php://output');, Można to naprawić, dodając ob_start();na początku skryptu i ob_end_clean();tuż przed readfile(); lub save('php://output');.


Problem, który masz, dotyczy logowania i raportowania błędów: nie widzisz ostrzeżeń, które wskazywałyby na problem: nagłówki już wysłane. Jest to przedstawione w tym pytaniu referencyjnym: stackoverflow.com/q/8028957/367456
hakre

2
ob_end_clean()nieod_end_clean()
turson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.