TIP게시판

제목 CI EXCEL 만들기 ( XML ) 방식 - (대용량?)
글쓴이 주스 작성시각 2017/02/03 11:24:00
댓글 : 6 추천 : 1 스크랩 : 1 조회수 : 20913   RSS

이번에 엑셀 업 다운로드 기능 만들면서 여기에 없는 내용 같아 적어 둡니다.

해당 내용은 엑셀 다운로드 내용만 적었으며 read 부분은 PHPExcel 하고 excel_reader2 두가지 별도 처리 했습니다.

일단 PHP에서 엑셀 업다운로드는 PHPExcel 이라는 라이브러리 사용을 하는데요 

2천줄만 넘어도 5~10초 정도 걸리고 셀 속성을 추가 하면 더 느려지더군요 그 속도에 반해서 버렸습니다.... (애도)

1번 개선 방식 - pear ( spreadsheet 패키지 )

    테스트 결과 - 로컬에서 해보니 속도가 생각보다 느린듯(5~10초 소요)??? 물론 PHPExcel 보다는 훨씬 빠릅니다.

    사족 : pear 패키지 관리가 안되고 로컬서버 개발서버 상용서버 버전 맞추고 환경잡기 피곤해서 마음이 안감;;

 

2번 개선 방식 - Excel XML 양식으로 생성

    테스트 결과 - 가장 만족스러운 속도 1만건 정도 3~5초 걸리는듯

 

그래서 XML 형식으로 만들기로 했습니다.

application/third_party/ 아래 첨부 파일 ExcelWriterXML 를 놓고 ( 구글에서 줏어다가 약간 수정 했습니다 )

libraries  아래 Excelxml.php 라는 파일을 만들고 

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

require_once APPPATH."/third_party/ExcelWriterXML/ExcelWriterXML.php";

class Excelxml extends ExcelWriterXML {
    public function __construct() {
        parent::__construct();
    }
}

로드만 해오도록 해주고.

컨트롤러에서 


    public function dnExcelXml()
    {
        set_time_limit(0);
        ini_set('memory_limit','-1');
        $this->load->library('excelxml');

        $this->excelxml->docAuthor('Yang');

        $sheet = $this->excelxml->addSheet('sheet1');

        $format = $this->excelxml->addStyle('StyleHeader');
        $format->fontSize(12);
        $format->fontBold();
        $format->bgColor('#333333');
        $format->fontColor('#FFFFFF');
        $format->alignHorizontal('Center');
        $format->alignVertical('Center');
        $format->border();

        $sheet->writeString(1,1,'번호1','StyleHeader');
        $sheet->writeString(1,2,'번호2','StyleHeader');
        $sheet->writeString(1,3,'번호3','StyleHeader');
        $sheet->writeString(1,4,'번호4','StyleHeader');
        $sheet->writeString(1,5,'번호5','StyleHeader');

        $filename = 'test.xls';

        $this->excelxml->sendHeaders($filename);
        $this->excelxml->writeData();
    }

 

요런식으로 사용하면 됩니다.

필요한 API 는 "ExcelWriterXML_Sheet.php" 파일 상단에 주석으로 되어 있어요~

도움되는 내용 이었으면 좋겠네요 ㅎㅎ

 

첨부파일 ExcelWriterXML.zip (16.5 KB)
 다음글 Nginx + Socket.io 설정 (1)
 이전글 Codeigniter와 Mailgun 쉽..게? 연동하... (1)

댓글

kaido / 2017/02/03 11:25:36 / 추천 0
오. 좋은정보 감사합니다. 한번 실험해봐야겠네요.
한대승(불의회상) / 2017/02/03 11:32:53 / 추천 0

항상 csv나 html로 만들어서 배포 했는데 테스트 진행해봐야 겠습니다. ^^

좋은 정보 감사 합니다.

수호아빵 / 2017/02/07 06:04:41 / 추천 0
많은 도움이 되었습니다. 감사합니다.
양승현 / 2017/02/10 12:54:02 / 추천 0

데이터가 많을경우 속도 문제가 뒤따르기 마련인데.. 매우 좋은팁 이네요.

감사합니다.

TOPdeveloper / 2018/03/16 15:21:25 / 추천 0

좋은 정보 감사합니다,

그런데 위에 예제를 그대로 해봤는데

다운 받아지는 파일의 확장자는 xml로 됩니다,

열리는 건 정상적으로 열리는데 다른이름으로 저장했을 경우 xml로 나오죠.

이걸 질문 드리는 이유는 다운받은 파일을 다시 업로드하는 기능을 구현하려는 문제 때문입니다.

주스 / 2018/07/06 17:50:05 / 추천 0

TO. TOPdeveloper

test.xls 로 파일명을 정했기 때문에 당연히 엑셀 파일(xls)로 다운됩니다.

라이브러리 파일을 보면 파일명이 지정되지 않을경우 xml 로 만들어졌던 걸로 기억합니다.

어떤 이유인지 모르겠지만 파일명 지정이 안된듯 한데요 직접 해결하셔야 할 듯 합니다. ㅎㅎ