CI 묻고 답하기

제목 엑셀 어찌어찌했는데 밑의내용
글쓴이 슈퍼개미 작성시각 2010/01/11 22:06:45
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 33170   RSS

안녕하세요... 엑셀을 어찌어찌 했는데 ...또 다른문제가.. 다들 어디다 넣고 사용하세요 저는

controller 에

function list(){
     $this->load->model('list_model');
       ...

     if ($mode){ 
        $this->load->library('phpexcel');
        $this->load->library('PHPExcel/IOFactory');
        $objPHPExcel = new PHPExcel();
        header("Content-type: application/vnd.ms-excel"); 
        header("Content-type: application/vnd.ms- excel;charset=KSC5601" ); 
        header("Content-Disposition: attachment;   filename=List[".date("Y-m-d")."].xls"); 
        header("Content-Description: PHP5 Generated Data" ); 
        $objPHPExcel->getProperties()->setTitle("title")
              ->setDescription("description");
        // Assign cell values
        $objPHPExcel->setActiveSheetIndex(0);
        $objPHPExcel->getActiveSheet()->setCellValue('A1', 'cell value here');
        $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5');
  $objWriter->save("nameoffile.xls"); } $this->load->view('header'); $this->load->view('list',$data); $this->load->view('footer'); }
$mode가 excel이 들어오면 excel을 내보내려고하는데 위에서 설정한 ('A1', 'cell value here')은 무시가 되고 현재 웹페이지가
전부다 출력이 되던가 아니면 header오류가 나더군요. 님들은 어떻게 사용하시는지요..
작은 예제라도...
감사합니다.
 다음글 controllers 폴더를 서브 폴더로 정리하기? (4)
 이전글 엑셀출력은?,,, (14)

댓글

변종원(웅파) / 2010/01/12 08:03:44 / 추천 0
자기 메소드말고 엑셀작업만 하는 새로운 메소드를 호출하면 될것같네요
슈퍼개미 / 2010/01/12 08:12:15 / 추천 0

그럼 엑셀을 호출하는 라이브러리를 만들어서 사용하라는 말씀이신가요?
쿼리를 날리고 데이터를 받은다음에 실행 되어야 합니다. 그리고 엑셀 저장창이뜨면서
웹은 현재 엑셀저장하는 페이지여야하구요.... 만약 메소드를 만들어서 출력하면 지금 웹페이지는 안보이지 않을 까요?

헛발이 / 2010/01/12 08:54:38 / 추천 0

저는 초보자지만... 엑셀자료가 있어서 올려 봅니다.. 참고 하세요~
http://pg.4696.info/php/codeigniter/ci_excel.html

변종원(웅파) / 2010/01/12 10:01:13 / 추천 0

엑셀출력 목적이 다운로드후 사용이니까 보통은 페이지에서 엑셀출력 버튼 클릭시 새창을 띄우고
거기서 다운로드 시키도록 합니다.

팝업에 엑셀출력 메소드 호출, 데이터는 post로 넘기면 되겠죠.

헛발이님이 올리신 예제처럼 다른 메소드에서 처리를 하는거죠.

슈퍼개미 / 2010/01/12 11:10:02 / 추천 0

그럼 controller 에서 mode 가 excel일때 팝업을 띄우고 거기서 출력하라는 말씀?
그럼 controller 에서 popup을 띄우고 넘길수있나로? view에서 먼저 popup을 만들지 않고
controller에서 띄우는 방법이있나요? 살짝 예제라도..

변종원(웅파) / 2010/01/12 11:42:33 / 추천 0
컨트롤러에서 데이터가 가공하여 뷰를 호출하고 그 뷰에서 팝업을 띄우고 거기다가 post로
그 가공된 데이터를 넘기면서 엑셀출력만 하는 메소드를 호출하면 됩니다.
슈퍼개미 / 2010/01/12 12:48:59 / 추천 0
죄송합니다.초보라 이해가잘....지송 ㅡㅡ; 
변종원(웅파) / 2010/01/12 15:14:21 / 추천 0
a 메소드 (데이터 작업후 a 뷰를 호출) - a 뷰 : form의 action을 a 메소드로 보내는 것이 아니라 b 메소드로 보냄

b 메소드 (엑셀출력 하는 구문만 있음)

그러니까 기존에는 a 뷰에서 form을 a 메소드로 보냈는데 그게 문제가 되니
form내용을 엑셀출력만 담당하는 b 메소드로 보내는 겁니다.

native php에서도 사용하는 내용이구요. form을 보낼때 자기 자신에게 보내서 처리하거나(기존방식)
자기 자신이 아닌 다른 php파일로 보내서 처리하거나(위 방식) 하죠.
자기 자신에게 데이터를 보내서 문제가 생기니까 엑셀출력만 담당하는 다른 넘에게 보내면
에러가 없을거라는 거지요. ^^
byung82 / 2010/01/12 15:35:19 / 추천 0
흠 만약 엑셀을 ms-execl만 사용한다고 가정을 하면 그냥 html 채로 뿌려주고 content type만 excel로 하셔도 됩니다.
그리고 바로 direct로 출력을 하실려면 phpexcel 샘플에 보면 저장하지 않고 바로
response로 출력하는 샘플이 있습니다.
그걸 참조하시고 엑셀 출력량이 많다면 phpexcel은 조금 무리가 갈것입니다.
메모리 사용량이 좀 되어서 php.ini에서 limit를 풀어주지 않으면 계속 오류가 떨어질것 입니다 ^^:
그럼
슈퍼개미 / 2010/01/13 14:22:11 / 추천 0

     너무 급해서리... 소스를 조금만 더 천천히 봤어도 빨리 해결 했을텐데..
     답은 소스에 있었습니다. 감사합니다