다운로드 할 phpexcel


79

안녕하세요 저는 phpexcel을 처음 사용하고 내 서버에 저장하지 않고 클라이언트 다운로드에 만든 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');

그러면 브라우저에있는 그대로 전송됩니다.

당신은 몇 가지 추가 할 헤더 문서를 브라우저 유형을 알 수 있도록 파일인지, 파일 다운로드와 그것의 일반적인 같이 제 1 및 그것은 (파일 이름) 방법을 지정해야합니다 :

// 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 헤더의 경우 다음 질문도 참조하십시오 . Excel 문서에 대한 MIME 유형 설정 .


1
다운로드 할 파일을 얻었지만 내가 만든 파일이 아니라 $ objWriter-> save ( 'php : // output') 할 때 내 구멍 페이지를 엉망으로 만듭니다 = \
Dvir Levy

1
해당 페이지에 출력하는 것은 두 header줄 의 출력 과 ->save()작업 뿐입니다 . a) 페이지 표시 또는 b) 다운로드 제공 중에서 결정해야합니다 . 둘 다 하나의 스크립트로 쉽게 작동하지 않습니다. 그러나 다운로드 용 스크립트와 페이지 용 스크립트를 하나씩 생성 할 수 있으며 페이지 스크립트가 실행되면 브라우저가 다른 이름으로 저장 대화 상자를 제공하도록 다운로드 스크립트로 리디렉션합니다.
hakre

내 문제는 내가 joomla를 사용하고 있으며 빈 페이지에서로드하는 방법을 찾을 수 없다는 것입니다. 매번 시도 할 때마다 메뉴와 모든 것이 포함 된 구멍 줌라 페이지가 표시됩니다. 이 문제에 대한 답을 어디서 찾을 수 있는지 알고 있습니까? 나는 스팸 스택 오버플로를 원하지 않습니다 ...
Dvir Levy 2011

Dvir-URL에 & format = raw를 사용하십시오. 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'); 페이지에 쓰레기를 인쇄하는 파일을 다운로드하지 않습니다. 왜 이런 일이 일어나는지 아십니까?
Dvir Levy

헤더도 설정 했습니까?
matino 2011-12-22

PHPPowerpoint를 사용하여 PPT를 작성하려고하는데, 언급 된 단계를 정확히 수행했지만 MIME유형을으로 변경하면 application/vnd.openxmlformats-officedocument.presentationml.presentation내 시스템에 파일을 다운로드하지만 File can't be opened. 코드가 서버에 쓸 때 파일이 작동 중이었습니다.
void

나를 위해 완벽하게 일했습니다. Thanks¡

6

XLSX 용

확장자가있는 XLSX의 $ xlsName 이름에 설정 합니다. 예 : $ 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의 $ xlsName 이름에 설정 합니다. 예 : $ 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 2014

PHPPowerpoint를 사용하여 PPT를 작성하려고하는데, 언급 된 단계를 정확히 수행했지만 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')를 사용할 때 오류 (파일 및 폴더 권한과 관련이있을 수 있음)가 표시됩니다. '쓰기를 위해 php : // output을 열 수 없습니다.'라는 메시지와 함께 포착되지 않은 예외 'PHPExcel_Writer_Exception'. third_party / PHPExcel / Writer / Excel2007.php : 241 스택 추적 : # 0
Enrique

PHPPowerpoint를 사용하여 PPT를 작성하려고하는데, 언급 된 단계를 정확히 수행했지만 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');

PHPPowerpoint를 사용하여 PPT를 작성하려고하는데, 언급 된 단계를 정확히 수행했지만 MIME유형을으로 변경하면 application/vnd.openxmlformats-officedocument.presentationml.presentation내 시스템에 파일을 다운로드하지만 File can't be opened. 코드가 서버에 쓸 때 파일이 작동 중이었습니다.
void

3

이미 문제를 해결했을 가능성이 있습니다. 어떤 식 으로든 도움이 되었기를 바랍니다.

다운로드 된 모든 파일은 빈 줄로 시작합니다. 제 경우에는 빈 줄이 4 개이고 문제가 발생합니다. 아무리 당신이 작업하는 경우 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()
turson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.