개발 Q&A

제목 phpexcel 사용하여 excel download시 오류
카테고리 PHP
글쓴이 순돌이33 작성시각 2018/04/19 11:03:14
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 15200   RSS

안녕하세요 PHPEXCEL로 개발 시 잘 되지 않는 부분이 잇어서 문의 합니다.

EXCEL을 읽어서 처리하는 건 잘되는 걸로 봐서는 PHPEXCEL 라이브러리는 제대로

LOAD되는거 같습니다. (사실 PHP를 잘모릅니다. -.-;;)

Sample코드는 다음과 같습니다. 

-- controller 소스

           $this->load->library("PHPExcel");

           $filename = 'test2.xls';

           $this->phpexcel->getActiveSheet()->setTitle('부대운임');

           $this->phpexcel->getActiveSheet()->setCellValue('A1', 'partner');

           $this->phpexcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);

           $this->phpexcel->getActiveSheet()->setCellValue('A2', '1234');

           header("Content-Type: application/vnd.ms-excel; charset=utf-8");

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

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

           $objWriter = PHPExcel_IOFactory::createWriter($this->phpexcel, 'Excel5');

           ob_end_clean();

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

           exit;

CodeIgniter 참고해서 테스트를 했는데 브라우저에 아무런 반응이 없습니다. 화면에서는 ajax를 통해 호출 했습니다. 

크롬에서 F12 클릭해서 네트워로 해당 호출 내용을 보면 첨부파일과 같이 나옵니다. 

$objWriter->save('php://output');  이부분을 $writer->save('d:\out.xlsx');로 바꾸면 로컬 pc에 excel은 잘 저장됩니다. 

header 부분이 문제인거 같기도 하고 일단 echo 같은 화면 출력은 하지 않고 있습니다. 

어떤 문제가 있는 걸까요?

아시는 분 답변 부탁드립니다. 

감사합니다.

 

 


태그 excel,phpexcel
첨부파일 excel_down.png (298.0 KB)
 다음글 자동로그인에 대하여
 이전글 MariaDB & MySQL 데이터베이스 단위 ... (4)

댓글

양승현 / 2018/04/19 17:54:24 / 추천 0
​class Test3 extends CI_Controller
{
  public function __construct(){
    parent::__construct();
    $this->load->library("Excel");
  }
  
  
  function index(){
    $filename = 'test2.xls';
    
    $this->excel->getActiveSheet()->setTitle('부대운임');
    
    $this->excel->getActiveSheet()->setCellValue('A1', 'partner');
    
    $this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
    
    $this->excel->getActiveSheet()->setCellValue('A2', '1234');
    
    header("Content-Type: application/vnd.ms-excel; charset=utf-8");
    
    header('Content-Disposition: attachment;filename="' . $filename . '"');
    
    header('Cache-Control: max-age=0');
    
    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
    
    ob_end_clean();
    
    $objWriter->save('php://output');
  }
}

 

로컬에서 정상적으로 다운로드 됩니다.

(PHPEXcel경로 : /application/libraries/third_party/PHPExcel)

변종원(웅파) / 2018/04/19 18:31:39 / 추천 0
정상적으로 리턴 된 것인데 리턴된 데이터를 자바스크립트에서 못 읽는것이죠.
순돌이33 / 2018/04/20 09:29:03 / 추천 0

제 생각에도 excel down위한 처리는 별 문제는 없는거 같습니다. 

save를 로컬 경로로 하면 로컬 경로에 파일은 생성됩니다. 

자바스크립트에서 읽기 위해서 다른 처리가 필요한가요?

아래 자바스크립트 소스입니다.

 

    fn_excel_down = function(){

        $.ajax({
            url : "/flight/flight_exp_add_charge/excel_down",
            type : "post",
            data : {
                    area_code1: $('#area_code1').val()
            },
            success : function(response) {
                // 이부분에 처리를 해야 하는게 있나요?
            },
            error: function(request,status,error) {
                //console.log(error);
            }
        });

    }

양승현 / 2018/04/20 16:35:38 / 추천 0

ajax로 호출을 하신거군요.. 당연히.. 데이터는 넘어오나 넘어온 데이터로 끝납니다.

위 상태로 하시기에는 response 받은 데이터를 파일로 저장하는.. 뭐 그런? 작업이 필요한데요.

 

보통은 form을 콜하는 형태로 많이들 구현합니다.  뭐 새창으로 url을 열어도 되구용.. 방법은 여러가지겠지용

 

<label id="fbtn">버튼</label>
<form id="excelForm"></form>

<script type="text/javascript">
<!--
$(document).ready(function(){
    $("label#fbtn").on("click",function(){
    $("#excelForm").attr({'method':'post','action':'/dev/test3/exceldownload'});
    $("#excelForm").submit();
  });
});
//-->
</script>