테스트 사이트 - 개발 중인 베타 버전입니다

용량 큰 엑셀 파일 처리엔 Spout

· 4년 전 · 4311 · 13

최근에 파일 용량이 큰 엑셀 파일을 읽어서 DB에 데이터를 기록하는 걸 개발했는데

용량이 크니까 PHPExcel 에서는 처리가 되지 않고 오류를...

 

그래서 찾아낸 Spout : https://github.com/box/spout

 

개발환경이 PHP 5.6.x 라서 이 버전에 사용할 수 있는 2.7.3 버전을 사용했습니다.

설치는 컴포저로 했으며 만약 컴포저 사용이 어려울 때는 아래의 require 코드를 추가해줍니다.

 

버전 3.x 에서는 class 명 등이 변경됐으니 그에 맞게 사용하면 됩니다.

 

[code]

require_once '[PATH/TO]/src/Spout/Autoloader/autoload.php';

[/code]

 

[code]

<?php
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '0');

 

$file = __DIR__.'/patent.xlsx';

 

use Box\Spout\Reader\ReaderFactory;
use Box\Spout\Common\Type;

 

$reader = ReaderFactory::create(Type::XLSX);

$reader->open($file);

 

foreach ($reader->getSheetIterator() as $sheet) {
    //if ($sheet->getIndex() > 0)
    //    break;
    foreach ($sheet->getRowIterator() as $row) {
        print_r($row);
    }
}

 

$reader->close();

[/code]

 

실제 사용해본 경험으로는 11MB 정도의 엑셀 파일을 읽고 데이터를 입력하는데 10초 정도

소요되는 듯 했습니다. 물론 이 시간은 서버 환경 등에 따라 달라질 수 있습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 13개

감사합니다.
혹시 db를 엑셀로 만드는것도 가능 한가요?
문서에는 가능한 걸로 보입니다.
https://opensource.box.com/spout/docs/

게시글 목록

번호 제목
17819
17818
17817
17816
17814
17811
17810
17809
17808
17803
17799
17798
17797
17795
17794
17793
JavaScript JSON Beautify
17790
17789
17786
17774
17760
17755
17750
17729
17722
17714
17708
17686
17676
17666