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

Dvir Levy
źródło

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 .

hakre
źródło
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');
matino
źródło
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');
Rogerio de Moraes
źródło
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.

JoshStrange
źródło
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');
ostry
źródło
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');.

Efren Gutierrez Sosa
źródło
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