CI 묻고 답하기

제목 엑셀출력은?,,,
글쓴이 슈퍼개미 작성시각 2010/01/10 18:39:37
댓글 : 14 추천 : 0 스크랩 : 0 조회수 : 37367   RSS
안녕하세요..! 엑셀출력을 하려다보니 excel_pi가 있던데 이것을 사용하려니
그냥 데이터를 찍는 수준인것 같더군요.. 이것말고
Spreadsheet Excel Writer Pear Package 라는것이 있던데 이것은 어떻게 사용해야할지요..
주소가..http://pear.php.net/manual/en/
감사합니다.


 다음글 엑셀 어찌어찌했는데 밑의내용 (10)
 이전글 view에서 model호출은 어떻게.. (5)

댓글

변종원(웅파) / 2010/01/10 20:15:43 / 추천 0
보통 엑셀출력은 csv형태정도로 출력하고 마는데 완전한 형태가 필요하신가 봅니다 다음 링크 참고해보세요
http://codeigniter.com/wiki/PHPExcel/
변종원(웅파) / 2010/01/11 12:40:44 / 추천 0
pear를 ci에서 쓰시려면 방법을 찾아봐야 합니다.
http://codeigniter.com/wiki/PEAR_integration/
슈퍼개미 / 2010/01/11 15:54:31 / 추천 0

항상 좋은답변감사합니다. 그런데 위의 PEAR방식을 사용하려고 했더니 PEAR을 INSTALL해야하더군요..
그래서 PHPExcel방법을 사용하려고 하니 작동을 하지 않습니다. 오류만 계속뜨고..
지금 HMVC방식을 사용하고 있는데 그래서인가요?///

변종원(웅파) / 2010/01/11 16:23:13 / 추천 0
hmvc와는 상관이 없을 겁니다. 어떤 에러가 나는지 올려주세요.
PHPExcel 라이브러리 다운받아서 application/libraries에 올려두시고 진행하신거죠?
케이든 / 2010/01/11 16:44:08 / 추천 0
PEAR.php를 깔고

링크에 나와있는 디펜던씨 3개를 설치하셧는지요


슈퍼개미 / 2010/01/11 16:52:07 / 추천 0

먼저찾아보니이런내용이있더군요.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Excel  
{
    public $workbook;
    
    function __construct()
    {
        // PHPExcel libraries have to be in your include path !
        require_once(BASEPATH .'application/Classes/PHPExcel.php');
        require_once(BASEPATH .'application/Classes/PHPExcel/IOFactory.php');
    }
    
    function load()
    {
        // Path to the template file
        $template_location = 'resources/template.xls';
    
        $xls_reader = PHPExcel_IOFactory::createReader('Excel5');
        $this->workbook = $xls_reader->load($template_location);
        
        var_dump($this->workbook); // Yea, successfully load the data
    }
    
    function send()
    {
        //So far so good, now let's create the writer
        
        $xls_writer = PHPExcel_IOFactory::createWriter($this->workbook, 'Excel5'); // Trouble maker
        // Stops here, no error message, output nothing
        
        header('Pragma: public');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Type: application/force-download');
        header('Content-Type: application/octet-stream');
        header('Content-Type: application/download');
        header("Content-Disposition: attachment;filename=from-template.xls");
        header('Content-Transfer-Encoding: binary');

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

그래서 Excel.php를 system\libraries 에 넣고 controller 에서 $this->load->library('Excel');를 호출했습니다.
PHPExcel ERROR는
<b>Fatal error</b>:  Call to a member function garbageCollect() on a non-object in <b>C:\APM_Setup\htdocs\system\application\Classes\PHPExcel\Writer\Excel5.php</b> on line <b>158</b><br />
이고
PEAR.php는 설치를 해야하나요? 그냥 PEAR.php파일만 다운받아서 넣어놓았는데.. 설치방법을 사용하지 않으려고..

변종원(웅파) / 2010/01/11 17:21:10 / 추천 0
application\Classes\PHPExcel\Writer\Excel5.php  경로가 맞지않네요. 내부에서 수정을 해줘야할듯 합니다.
케이든 / 2010/01/11 17:21:21 / 추천 0
호출만 하셧는데 에러나셧나요?
send()하셧는데 에러나셧나요?
슈퍼개미 / 2010/01/11 17:22:17 / 추천 0
send요
그리고 경로는 맞는데요
BASEPATH .application\Classes....에 넣어놓고
libraries에 exe.php파일을 넣었습니다 위의파일...
케이든 / 2010/01/11 17:24:05 / 추천 0
그럼 저소스 그대로 사용하신거라면
load()에 있는

17번줄 xls파일이

제대로 로드가 안되어서

빈파일이라 에러가 생긴거같습니다

실제 존재하는 파일을 설정한후 해보세요
변종원(웅파) / 2010/01/11 17:39:50 / 추천 0
케이든님 말씀대로 $template_location = 'resources/template.xls'; 이 파일이 없어서 이겠네요.
샘플코드는 resources/template.xls 파일을 읽어서 다시 from-template.xls로 만들어주는 소스라서...
슈퍼개미 / 2010/01/11 17:49:16 / 추천 0
그런데 send만 호출했는데...
변종원(웅파) / 2010/01/11 17:52:00 / 추천 0
send()만 호출해도 당연히 에러가 납니다.
위의 샘플코드는 load하고 send가 쌍으로 되어있습니다. 
$this->workbook <- 이 변수 찾아보시면
load에서 만들고 send에서 가져옵니다.

없는 변수로 send()에서 엑셀파일을 만들려고 하니 에러가 난겁니다.
슈퍼개미 / 2010/01/11 21:35:24 / 추천 0

어찌어찌 했습니다 감사합니다.